{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PREDECTIVE MODEL"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DATA SOURCES\n",
    "\n",
    "Failure history: The failure history of a machine or component within the machine.\n",
    "Maintenance history: The repair history of a machine, e.g. error codes, previous maintenance activities or component replacements.\n",
    "Machine conditions and usage: The operating conditions of a machine e.g. data collected from sensors.\n",
    "Machine features: The features of a machine, e.g. engine size, make and model, location.\n",
    "The data for this example comes from 4 different sources which are \n",
    "real-time telemetry data collected from machines\n",
    "error messages\n",
    "historical maintenance records that include failures and machine information such as type and age."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "telemetry = pd.read_csv('telemetry.csv')\n",
    "errors = pd.read_csv('errors.csv')\n",
    "maint = pd.read_csv('maint.csv')\n",
    "failures = pd.read_csv('failures.csv')\n",
    "machines = pd.read_csv('machines.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of telemetry records: 876100\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>datetime</th>\n",
       "      <th>machineID</th>\n",
       "      <th>volt</th>\n",
       "      <th>rotate</th>\n",
       "      <th>pressure</th>\n",
       "      <th>vibration</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2015-01-01 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>176.217853</td>\n",
       "      <td>418.504078</td>\n",
       "      <td>113.077935</td>\n",
       "      <td>45.087686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 07:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>162.879223</td>\n",
       "      <td>402.747490</td>\n",
       "      <td>95.460525</td>\n",
       "      <td>43.413973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2015-01-01 08:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>170.989902</td>\n",
       "      <td>527.349825</td>\n",
       "      <td>75.237905</td>\n",
       "      <td>34.178847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2015-01-01 09:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>162.462833</td>\n",
       "      <td>346.149335</td>\n",
       "      <td>109.248561</td>\n",
       "      <td>41.122144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2015-01-01 10:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>157.610021</td>\n",
       "      <td>435.376873</td>\n",
       "      <td>111.886648</td>\n",
       "      <td>25.990511</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0            datetime  machineID        volt      rotate  \\\n",
       "0           0 2015-01-01 06:00:00          1  176.217853  418.504078   \n",
       "1           1 2015-01-01 07:00:00          1  162.879223  402.747490   \n",
       "2           2 2015-01-01 08:00:00          1  170.989902  527.349825   \n",
       "3           3 2015-01-01 09:00:00          1  162.462833  346.149335   \n",
       "4           4 2015-01-01 10:00:00          1  157.610021  435.376873   \n",
       "\n",
       "     pressure  vibration  \n",
       "0  113.077935  45.087686  \n",
       "1   95.460525  43.413973  \n",
       "2   75.237905  34.178847  \n",
       "3  109.248561  41.122144  \n",
       "4  111.886648  25.990511  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Telemetry data: format datetime field which comes in as string\n",
    "telemetry['datetime'] = pd.to_datetime(telemetry['datetime'], format=\"%Y-%m-%d %H:%M:%S\")\n",
    "\n",
    "print(\"Total number of telemetry records: %d\" % len(telemetry.index))\n",
    "telemetry.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABCYAAAF0CAYAAAD/1ThkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMTQAADE0B0s6tTgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl8U3X2P/5XKUsV0VHQ8avjiM7nNy7zUT8zKDoqOoLILjq4AuLC5oIwo4NUBKYFQQQERURWFbSyWWUvZS9bKS1bKW0ppQvd971ZmuT+/mgTmuYmuTe5uTdpX895+Biau50k997ce+77fd5BgiAIICIiIiIiIiLSQDutAyAiIiIiIiKitouJCSIiIiIiIiLSDBMTRERERERERKQZJiaIiIiIiIiISDNMTBARERERERGRZpiYICIiIiIiIiLNMDFBRERERERERJppr3UAREREgWDMmDE4efIkAKChoQGCIKBjx44AgFtuuQU7duxA7969UVpaiuDgYLtlO3bsiLi4OOTm5qJPnz6IjY3FDTfc4LCN1157DadPn0aHDh0cpu3duxddu3bFXXfdhfbt2+Pw4cMO6xg2bBiSkpJs63cXz6BBg5Cfnw8AMBgMaNeunW3bPXr0wKpVq3DXXXchJCQE7do1PssQBAFdunTBoEGD8NFHH6G2thZDhw5F7969MX36dLvtrF27FkuXLsWWLVvw+9//3vb60qVLsXnzZuzevdvhfX733XeIjIzEjh07AABpaWlYsmQJ4uLiYDQa8f/+3//DkCFDMHr0aNvn//XXXyMpKQnLly93WF+/fv1QXFws+h4ffvhhLFu2zDbvjBkzsHHjRmzevBl33323w7oSExOxatUqnDx5ErW1tejatSuefPJJvP/++7bv4qWXXkJycrLod3jo0CF06dLF4bWxY8fi6quvtr3WoUMHPPbYY5g2bRq6du2KdevWYdOmTfj1118d1ml14sQJLF++HGfPnoUgCLj99tvx0ksv4eWXX0ZQUBA2bdqEOXPmAAAsFgv0er3dNtesWYP777/f6fqJiIh8SiAiIiJZwsPDhSlTpji8/tRTTwlRUVFOl8vJyRH+/Oc/C2VlZaLTR44cKaxatcrltv/85z8LPXv2FH766Se719PT04W//vWvdut3F09z48aNExYvXiy6vcTERNvfFotFOHv2rNCzZ09hw4YNgiAIQlxcnHDPPfcIR44csYvngQceEA4ePOiwzuLiYuEvf/mLEB8f7zCtf//+tvd28uRJ4W9/+5vw1VdfCcXFxYLFYhFSUlKE1157TXj11VcFo9EoCIIgLF68WBg3bpzb9/jWW28J33zzjei0mpoaoUePHkJoaKgQGhrqMH3Pnj1Cjx49hDVr1ghFRUWC2WwWsrOzhQ8//FAYNGiQ0NDQIAiCILz44ovCjz/+6DYWq5iYGKFnz552r9XW1grvvfee8PrrrwuCIAg///yz8Pzzzztdx5YtW4SHHnpIiIiIECorKwWTySScOHFCGDhwoOh+Gh8fL/zv//6v5BiJiIh8jV05iIiIAszAgQOxbds2u9e2bt2Kfv36+XzbQUFBuP/++/Hwww8jNTUVANCzZ0+MHj0aU6dORU1NDUwmEyZPnoxXXnkFTz75pMM6brzxRvTp0weRkZF2ryckJKCwsBBDhw4FAPz3v//FuHHjMHHiRNx4440ICgrC3XffjRUrVqC4uBjr169X7H1t3boVd911F8aPH48dO3agrKzMNs1oNGL69OkIDQ3FqFGjcNNNN6Fdu3b44x//iE8//RRPPPEEqqqqFIulc+fOGDJkCFJSUtzOW1dXh1mzZmH27NkYPnw4rrvuOgQHB+Ohhx7Cd999h+joaBw9elSx2IiIiHyBiQkiIqIA88wzzyA1NRU5OTkAGrtXbNu2Dc8++6zPt22xWHD48GEcO3YMjz76qO31iRMnomvXrvjiiy+wcuVKBAUF4cMPP3S6nldffRW7du1CXV2d7bWNGzdi6NChuOaaa5CTk4O0tDTR9xQSEoIhQ4aIdgXx1IYNG/Dyyy+je/fu6NGjB9atW2ebFh8fD51O5zSWjz76CF27dlUsloKCAmzcuBGPPPKI23kTEhJgMpnQp08fh2m///3v8cQTTyj6OREREfkCa0wQEREpKDQ0FNOmTbN77bnnnnN4zZmvvvoK3377rd1rPXv2xNKlS21/X3PNNXjqqaewfft2vPPOOzhx4gRuvvlm3HbbbYrHAwCjRo1CcHAwjEYjGhoa8OCDDyI8PBxPP/20bZ4OHTpgwYIFGDZsGDp16oSNGzeK1lmweuSRR3DzzTdj165dGDZsGKqrqxEdHY1NmzYBAEpKSgAA3bp1E13+pptuss3jrdOnT6O4uBj9+/cHAIwYMQJhYWEYN24cOnbsiKKiInTt2tVW0wIAwsLCsH37dgCNNUdCQ0Px6quvAgDmz5+PL7/80m4bvXr1wqJFi0S3X1VVhQcffBBAY5Lpmmuuwd///ndMmTLFbewlJSXo2rWrrQZISzfddBPy8vLcroeIiEhLTEwQEREpaO7cubYbXE9MmjQJo0ePdjvfs88+iwULFuCdd97Bli1b8Nxzz/kkHqCxiOV9992HsrIyTJ06FVVVVaJdNO688048/fTTuPrqq/HHP/7R7XpfeeUVREZGYtiwYdi6dSvuv/9+/PnPfwbQ2N0DAPLz83H77bc7LJuXl2ebx1vr169HTU0NevXqZXutsrISO3fuxHPPPYeuXbuivLwcZrPZVkg0LCwMYWFhABoLXprNZtuykydPxsiRIyVv/7rrrkNcXJxHsd94440oKiqyi625vLw8p8kdIiIif8GuHERERAGoV69eKC8vx5kzZxATE4MBAwb4fJtdu3bFokWLUF1djQ8++ACCIDjMExwcLHqDLOb5559HcnIysrOz8csvv9haHADAbbfdhnvuuUd0JIr6+nrs3LkTffv29fzNNKmqqsKuXbuwfPlybNmyxfbfG2+8gbVr1wJoHL2jffv2iIqK8np7Snv44Ydx1VVXOdQcARqTOrGxsXjmmWc0iIyIiEg6JiaIiIhUVlJSgsLCQtt/5eXlstfRvn17DBw4ENOmTUPPnj0dhqH0lauvvhoLFizAsWPHvC4+ee2112LgwIFYvHgxSktLHRINM2fOREREBL7++muUlpbCbDYjOTkZ48aNw4033ohXXnnFNq/BYLD7TAsLC1FfX+82ht9++w233norHnvsMdx88822/4YPH47z588jISEBISEhmDVrFsLDw/HTTz+hsrISAJCTk4PPPvsMSUlJitaYEGMymRzeX21tLUJCQhAeHo7Zs2dj3bp1qKqqgtFoxPHjxzFmzBj07t0bjz/+uE9jIyIi8ha7chARESnoo48+wscff+zw+vr169G5c2cAcCii+MADD2Djxo0AgEWLFmHJkiUOyy9cuBBPPfWU3WtDhw7FTz/9hMmTJ3sUz1133eX+DYm499578fbbb2P+/Pl44okncOutt3q0HqCxCOYLL7yA9957z6Emxf33348NGzbgm2++wdChQ1FfX4+bb74ZgwcPxpgxY+xqPsTGxjp0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FRVYuXIlBg0aBAAYOHAgfvzxRxQUFCA3NxcRERG2aURERERERETUOqjSYmL16tXQ6/V499137V7ftWsX/vWvf2H8+PGoq6vDs88+i+HDhwMA+vfvj4yMDLz44oswmUx444038NRTT6kRLhERERERERGpJEgQWn/jkIqKOphMgVFjovfOR7UOgYiIiIiIiPzA/oHHtA5BsvbtPa8xoUpXDiIiIiIiIiIiMUxMEBEREREREZFmmJggIiIiIiIiIs0wMUFEREREREREmmFigoiIiIiIiIg0w8QEEREREREREWmGiQkiIiIiIiIi0gwTE0RERERERESkGSYmiIiIiIiIiEgzTEwQERERERERkWaYmCAiIiIiIiIizTAxQURERERERESaYWKCiIiIiIiIiDTDxAQRERERERERaYaJCSIiIiIiIiLSDBMTRERERERERKQZWYmJ0tJSfP/995g9ezZqa2uxd+9eX8VFRERERERERG2A5MTE6dOnMXDgQBw9ehSRkZGorKzElClT8PPPP/syPiIiIiIiIiJqxSQnJubOnYtPP/0Uq1atQnBwMP7whz9gxYoV+OGHH3wYHhERERERERG1ZpITExkZGXj66acBAEFBQQCAHj16oLy83DeREREREREREVGrJzkxceuttyI+Pt7utVOnTuHWW29VPCgiIiIiIiIiahvaS51x4sSJePvttzFkyBAYjUbMnz8fkZGR+PTTT30ZHxERERERERG1YpJbTPTu3Rtr165Fu3bt0LNnT1RXV2Pp0qW27h1ERERERERERHJJbjEBAPfddx/uu+8+X8VCRERERERERG2M5MRE7969bUUvm+vQoQOuv/56PPHEExg7dizat5eV6yAiIiIiIiKiNkxyV45hw4ahXbt2GDt2LMLCwjB+/Hh07NgRf//73zF48GDs3LkTX375pdv1rF69Gp988ont7507d6JPnz548MEHMXbsWBQXF9umLVmyBI888v+zd9/hUdXp28DvMzOZmUx6MpOEJJBKgECAEEIKCSX0AFIUQYoCoiCCYFcURUXXwipSVgFRLKi4RkGKgKI/C+gu7Lrrosv6KgKioEYCBFJImfePYSZTzvRyUu7PdeW6Mqc+c+bU53xLAfLz87FmzRo3vxoRERERERERtXQuJyZ2796NF154AVOmTEFJSQmuvvpqrF+/Hv/4xz8wbdo0bNiwAVu3brU7f319PVatWoUVK1aYhlVUVODBBx/E888/jy+++AJarRZ//vOfAQB79+7Fzp07sW3bNpSXl2Pr1q04cOCAF1+ViIiIiIiIiFoal+td/PLLL4iPj7cYptPpcPLkSQBAXFwcamtr7c6/fPlynDp1CpMnT0Z9fT0A4NSpU7h06RKampoAADKZDEqlEgCwY8cOTJ06FXFxcQCA6dOno7y8HEVFRW58vWYitVCIiIiIiIiIWqz28hzrcmKib9++WLJkCZYsWYKYmBj88ccfWLFiBXJyctDQ0IBXXnkFmZmZdudfsGABdDodVq9ejdOnTwMAsrKykJubiyuuuAJyuRxJSUnYsmULAODYsWOYNGmSaf7k5GRs27bNoy8ZFRXi0XxEREREREREUtFqw6QOISBcTkw8+uijuO2229C/f38oFAo0NjaiuLgYjz32GA4ePIjy8nJTNQwxOp3OZlhtbS2SkpLw9ttvIz09HQ899BDuv/9+rF27FjU1NVCr1aZp1Wo1ampq3Px6BpWVF9HY2OTRvERERERERERSqKiokjoEl8nlMo8LBbicmNBqtXjllVfw66+/4vTp04iPjzdVs4iLi8POnTvdXvnmzZuhVCpNXZDefffdKCwsRFVVFdRqNerq6kzT1tbWQqPRuL0OI73e41mJiIiIiIiIAq69PMe61bfnl19+iV9//RV6vR4//vgj6uvr8d1331n0suGO3377DY2Njc3BKBQQBAFyuRypqak4fvw4iouLARiqdqSlpXm0HiIiIiIiIiJqmVxOTDz00EN49913ERYWBr1eD0EQUFFRgdLSUo9XXlhYiHvuuQdXX3010tPTsXLlShQXF0Oj0aCsrAwrV65EaWkpGhsbsXnzZo8TIERERERERETUMrmcmNi9ezfefPNNVFVVYcuWLVixYgXWrl2L48ePe7zyIUOG4Oabb8bNN9+MCxcuoF+/fnj88ccBACNHjsTRo0cxadIkNDQ0YObMmRg8eLDH6yIiIiIiIiKilkfQ612rtZKXl4eDBw/izJkzmD59Onbt2oXa2loMHToUn3/+ub/j9Epl5UU0NLSOxi9Ld3nWHSoRERERERG1LR+VHZA6BJcpFJ43filzdcKEhAT88MMPiI6ORmVlJS5cuICmpiZUV1d7tGIiIiIiIiIiIperclxzzTWYOnUq3nvvPYwYMQKzZs2CQqFATk6OP+MjIiIiIiIiojbM5cTElClTkJWVhaioKCxZsgQvvvgiLl68iNmzZ/szPiIiIiIiIiJqw1yuyrF06VL07NkTSqUSSqUS8+bNw+23345HHnnEn/ERERERERERURvmsMTEL7/8gj179gAAtm3bhrS0NIvxVVVV+PTTT/0XHRERERERERG1aQ4TE3Fxcfjqq69QWVmJhoYGfPTRRxbjVSoVHnjgAb8GSERERERERERtl8PEhFwux6pVqwAAjzzyCJYuXRqQoIiIiIiIiIiofXDa+OU333wDAJg4caLpf2vdu3f3bVRERERERERE1C44TUxceeWVDscLgoD//ve/PguIiIiIiIiIiNoPp4mJI0eOBCIOIiIiIiIiImqHnCYmzJ08eRK7du3CL7/8Ap1Oh7KyMqSmpvorNiIiIiIiIiJq42SuTnjo0CGMHTsWBw4cQENDA/72t79h/Pjx+PLLL/0ZHxERERERERG1YS6XmFixYgUeeOABTJgwwTTsnXfewZ///Gf89a9/9UtwRERERERERNS2uVxi4ocffsC4ceMsho0bNw4//PCDz4MiIiIiIiIiovbB5cREdHQ0vv32W4th33zzDXQ6nc+DIiIiIiIiIqL2weWqHNdeey3mzZuH6dOnIzExESdPnsTmzZsxf/58f8ZHRERERERERG2Yy4mJ2NhYLFy4ENu3b0dFRQUSEhJwzz33YMyYMf6Mj4iIiIiIiIjaMJcTE08++SSqqqowZswYTJw4EVlZWf6Mi4iIiIiIiIjaAZfbmPjggw+wdu1aNDQ0YNasWbjiiiuwadMmnDlzxp/xEREREREREVEbJuj1er27M9XX12Pfvn148skn8dtvv+Hw4cP+iM1nKisvoqGhSeowXFK6q0jqEIiIiIiIiKgF+KjsgNQhuEyhkCEqKsSzed2ZuKmpCfv378f27duxb98+ZGZm4qabbvJoxURERERERERELicmHnnkEezevRsqlQpjx47FO++8g+TkZH/GRkRERERERERtnMuJiXPnzuGpp55CYWEhBEHwZ0xERERERERE1E64nJhYsWKFP+MgIiIiIiIionbI5V45fGXjxo247777TJ+PHDmCKVOmIDc3F1OmTMGPP/5oGrdmzRoUFBQgPz8fa9asCXSoRERERERERORnAUtM1NfXY9WqVRYlL6qqqjBr1izMmDEDBw8eRHFxMZYuXQoA2Lt3L3bu3Ilt27ahvLwcW7duxYEDradFUiIiIiIiIiJyzq1eObyxfPlynDp1CpMnT0Z9fT0AYN++fejevTtGjx4NALjhhhswdOhQAMCOHTswdepUxMXFAQCmT5+O8vJyFBWxO00iIiIiIiKitiJgJSYWLFiA9evXIyYmxjTsf//7Hzp06IAFCxYgPz8f8+fPR3h4OADg2LFjSElJMU2bnJyMo0ePerx+QWgdf0RERERERESA9M+ngXqWDViJCZ1OZzPs/Pnz2LFjB9auXYunn34azzzzDO68805s3rwZNTU1UKvVpmnVajVqamo8WndUVIjHcRMRERERERFJQasNkzqEgAhYYkKMUqlEfn4+iouLAQA333wzcnNzceHCBajVatTV1Zmmra2thUaj8Wg9lZUX0djY5JOYiYiIiIiIiAKhoqJK6hBcJpfLPC4UEPBeOcwlJyejqqp5Qzc2NkIQBOj1eqSmpuL48eOmcceOHUNaWprH69LrW8cfERERERERESD982mgnmUlTUwMHz4cR44cwZ49e9DQ0GDqHjQsLAxlZWV49dVXcerUKZw8eRKbN282NZJJRERERERERG2DpFU5EhISsH79ejz66KO455570LNnTzz++OMAgJEjR+Lo0aOYNGkSGhoaMHPmTAwePFjKcImIiIiIiIjIxwS9vu1XIKisvIiGhtbRxkTpLnaHSkRERERERMBHZQekDsFlCkUrbWOCiIiIiIiIiNo3JiaIiIiIiIiISDJMTBARERERERGRZJiYICIiIiIiIiLJMDFBRERERERERJJhYoKIiIiIiIiIJMPEBBERERERERFJhokJIiIiIiIiIpIMExNEREREREREJBkmJoiIiIiIiIhIMkxMEBEREREREZFkmJggIiIiIiIiIskwMUFEREREREREkmFigoiIiIiIiIgkw8QEEREREREREUmGiQkiIiIiIiIikgwTE0REREREREQkGSYmiIiIiIiIiEgyTEwQERERERERkWSYmCAiIiIiIiIiyTAxQURERERERESSYWKCiIiIiIiIiCTDxAQRERERERERSYaJCSIiIiIiIiKSDBMTRERERERERCSZgCcmNm7ciPvuu89m+NatW1FaWmoxbM2aNSgoKEB+fj7WrFkTqBCJiIiIiIiIKEAClpior6/HqlWrsGLF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\n",
      "text/plain": [
       "<Figure size 1280x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# PLOT OF VOLT TELEMETRY DATA\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "df = pd.read_csv('C:/Users/immanuel.i.p/telemetry.csv', parse_dates=['datetime'])\n",
    "# Draw Plot\n",
    "def plot_df(df, x, y, title=\"telemetry\", xlabel='index time instant', ylabel='voltage', dpi=80):\n",
    "    plt.figure(figsize=(16,5), dpi=dpi)\n",
    "    plt.plot(x, y, color='tab:green')\n",
    "    plt.gca().set(title=title, xlabel=xlabel, ylabel=ylabel)\n",
    "    plt.show()\n",
    "\n",
    "plot_df(df, x=df.index, y=df.volt, title='TELEMETRY VOLTAGE PLOT')    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of error records: 3919\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>datetime</th>\n",
       "      <th>machineID</th>\n",
       "      <th>errorID</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2015-01-03 07:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>error1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-03 20:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>error3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2015-01-04 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>error5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2015-01-10 15:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>error4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2015-01-22 10:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>error4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0            datetime  machineID errorID\n",
       "0           0 2015-01-03 07:00:00          1  error1\n",
       "1           1 2015-01-03 20:00:00          1  error3\n",
       "2           2 2015-01-04 06:00:00          1  error5\n",
       "3           3 2015-01-10 15:00:00          1  error4\n",
       "4           4 2015-01-22 10:00:00          1  error4"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Error data: format datetime field which comes in as string\n",
    "errors['datetime'] = pd.to_datetime(errors['datetime'], format=\"%Y-%m-%d %H:%M:%S\")\n",
    "errors['errorID'] = errors['errorID'].astype('category')\n",
    "\n",
    "print(\"Total number of error records: %d\" % len(errors.index))\n",
    "errors.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of maintenance records: 3286\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>datetime</th>\n",
       "      <th>machineID</th>\n",
       "      <th>comp</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2014-06-01 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2014-07-16 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2014-07-31 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2014-12-13 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2015-01-05 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0            datetime  machineID   comp\n",
       "0           0 2014-06-01 06:00:00          1  comp2\n",
       "1           1 2014-07-16 06:00:00          1  comp4\n",
       "2           2 2014-07-31 06:00:00          1  comp3\n",
       "3           3 2014-12-13 06:00:00          1  comp1\n",
       "4           4 2015-01-05 06:00:00          1  comp4"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Maintenance data: format datetime field which comes in as string\n",
    "maint['datetime'] = pd.to_datetime(maint['datetime'], format=\"%Y-%m-%d %H:%M:%S\")\n",
    "maint['comp'] = maint['comp'].astype('category')\n",
    "\n",
    "print(\"Total number of maintenance records: %d\" % len(maint.index))\n",
    "maint.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of machines: 100\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>machineID</th>\n",
       "      <th>model</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>model4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>model3</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>model3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>model3</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  machineID   model  age\n",
       "0           0          1  model3   18\n",
       "1           1          2  model4    7\n",
       "2           2          3  model3    8\n",
       "3           3          4  model3    7\n",
       "4           4          5  model3    2"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Machine data: format datetime field which comes in as string\n",
    "machines['model'] = machines['model'].astype('category')\n",
    "\n",
    "print(\"Total number of machines: %d\" % len(machines.index))\n",
    "machines.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of failures: 761\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>datetime</th>\n",
       "      <th>machineID</th>\n",
       "      <th>failure</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2015-01-05 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-03-06 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2015-04-20 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2015-06-19 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2015-09-02 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>comp4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0            datetime  machineID failure\n",
       "0           0 2015-01-05 06:00:00          1   comp4\n",
       "1           1 2015-03-06 06:00:00          1   comp1\n",
       "2           2 2015-04-20 06:00:00          1   comp2\n",
       "3           3 2015-06-19 06:00:00          1   comp4\n",
       "4           4 2015-09-02 06:00:00          1   comp4"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Failure data: format datetime field which comes in as string\n",
    "failures['datetime'] = pd.to_datetime(failures['datetime'], format=\"%Y-%m-%d %H:%M:%S\")\n",
    "failures['failure'] = failures['failure'].astype('category')\n",
    "\n",
    "print(\"Total number of failures: %d\" % len(failures.index))\n",
    "failures.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Count')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot of failures\n",
    "\n",
    "import pandas as pd\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import numpy as np\n",
    "failures=pd.read_csv(\"C:/Users/immanuel.i.p/failures.csv\")\n",
    "sns.set()\n",
    "sns.set_style(\"whitegrid\")\n",
    "plt.figure(figsize=(8, 4))\n",
    "failures['failure'].value_counts().plot(kind='bar')\n",
    "plt.ylabel('Count')\n",
    "#TO CHECK FOR MISSING VALUES\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DATA ANALYSIS"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Evaluating the telemetry data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "## DETERMINING OVERALL LAGGING FEATURES FROM TELEMETRY\n",
    "#FINDING MEAN AND STANDARD DEVIATIONS FOR THE VARIABLES"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[176.21785302 162.8792229  170.98990241 ... 192.4834144  165.47530995\n",
      " 171.33603658]\n",
      "Mean value:        170.77773639409241\n",
      "Standard deviation: 15.509105355275834\n",
      "Minimum voltage:     97.333603782359\n",
      "Maximum voltage:     255.124717259791\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ8AAAEJCAYAAABL3SrKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X1cVHXe//HXwAyoDbuEO4iLyppF9tBNtvCGymHbTW6CySTt8g4sd1fz4b2FIpKupeLFkpIZbu5aXatuV2QFyQWY6673tqlbkl5YVmIqBgNo3CR3M9/fH/6YSwQbRDjM4uf5ePCA8+Wc73mfMxw+c27mHJ1SSiGEEEJoyK2zAwghhLj1SPERQgihOSk+QgghNCfFRwghhOak+AghhNCcFB8hhBCak+Ij2l1sbCwbN25s1v76668zY8aMH5w2ISGBTZs2AbB+/Xr+9re/dUjGq507d4577rmH0aNHM3r0aCwWC+PHjycnJ8cxzssvv0xmZuYP9vNDea+e/u6776a8vPyGMubn57N06VIAPvvsM+bMmXND07eFzWZjxowZhIeHs2XLlg6fX6PrrZ9du3axYsUKzXKIjqXv7ACi65k4cSJpaWlMmzatSXtGRgZJSUmt7uef//wnd955Z3vHa1G3bt3IyspyDJ8/f56nnnoKd3d3wsPDmTt3rtM+fihva6b/IV9++SXFxcUA/PznP2fdunU31V9rFBcXs3//fj799FPc3d07fH7O/PrXv+bXv/51Z8cQ7USKj2h3o0aNYtWqVRw5coTg4GAAPv74Y5RSPPjggwC8/fbbbN68GTc3N37yk5/w/PPP079/f0cfW7du5fjx46SkpODu7s6dd97JCy+8QHV1NVarlYEDB5KWloanpyd79uwhNTUVNzc37rnnHg4ePMhf//pX+vTpwzvvvMNbb72F3W7H29ub559/ngEDBjhdBn9/f+bMmcOmTZsIDw8nISGBu+66i9/85jesW7eOnTt3YjAYuP3220lOTmbnzp1N8u7atYtLly5x9uxZfvnLX1JWVuaYHiAtLY3PPvsMu93OvHnzePjhh3nvvffYsWMHr732GoBj+Pe//z3r1q2jsrKSxYsX8/jjj/Piiy+SnZ1NZWUly5cv5+TJk+h0OkaOHMmCBQvQ6/X8/Oc/Z9q0aRw4cICSkhJ++9vfMnHixGbLeuTIEVJSUrh8+TIGg4F58+Zx33338dvf/paGhgZiYmJ45ZVX6Nevn2OahIQEunXrxhdffEFZWRm/+tWv8Pb25h//+AdWq5UVK1YQEhLC6dOnr/u6HTt2jBUrVjjmu3DhQkJCQgB45ZVXOHbsGJcuXeI3v/kNkyZNarJ+YmNjCQoK4l//+hcXLlwgJCSEF198ETc3N/71r3+RmprK5cuXcXNzY9asWTz88MNYrVYWLVrExYsXAQgNDWXevHlt+RMX7UEJ0QHWrVunFi1a5BhesGCBevPNN5VSSh08eFA98sgjqqysTCml1LvvvqsiIyOV3W5XixYtUn/+85+VUkpNnjxZ5ebmKqWUWr16tcrMzFRKKVVXV6eio6NVXl6eKi8vV8OGDVMFBQVKKaXee+89FRgYqM6ePav++c9/qokTJ6rvv/9eKaXUvn37VERERLOsZ8+eVUFBQc3av/jiCzVkyBCllHLkKioqUvfdd5+qra1VSim1adMmtXPnzmZ5Fy1apKZMmeLo6+rlCgwMVK+99ppSSqnPP/9cDRs2TJWVlal3331XTZs2zTHN1cNX//zRRx+pqKgopZRSCxcuVC+++KKy2+2qtrZWTZ061dF3YGCg2rx5s1JKqc8++0wNHjxY1dTUNFnG8vJyFRISoj799FPHMg8bNkx98803110vjcszbtw4VVdXp0pKSlRgYKD6y1/+opRS6s0331RPP/30D75udXV16sEHH1T/+Mc/HPmio6OVzWZTgYGBatOmTUoppU6cOKEGDx6s6urqmqyDyZMnqzlz5iibzaYqKyvVQw89pA4dOqQuXbqkwsLC1NmzZ5VSSn377bfKbDar8+fPq/Xr16vnn39eKaVUdXW1mjdvnqqoqGhx+UTHkz0f0SGefPJJoqKiqKqqoqGhgf379/P73/8egH379vHoo4/i4+MDQExMDCtXruTcuXPX7S8+Pp4DBw7wpz/9icLCQkpKSvj+++85cuQIAwYMYODAgQCMGTPGcV5g9+7dnDlzhvHjxzv6qaio4NKlS3h7eztdBp1OR7du3Zq09erVi4EDBzJmzBjMZjNms9nxbv1a999//3X7njBhAgCBgYEMGDCATz75xGmeluzdu5e33noLnU6Hh4cH48eP57/+678chzwbD1MNGjSIuro6vv/+ezw9PR3T5+fn069fP4YMGQLAXXfdxX333cfHH3/M8OHDf3DeDz/8MAaDAZPJRI8ePRg5ciQA/fr149KlS8D1X7cvvvgCNzc3fvnLXwIwePBgtm/f7ug7OjoagHvuuYe6ujqqqqpanL+bmxtGo5GAgAC+++47Pv30U6xWKzNnznSMp9Pp+Pzzzxk5ciTTpk3jwoULPPDAAzz77LN4eXnd0PoW7UeKj+gQvXr14oEHHiAnJ4fvv/+e8PBwx4Zut9ubja+UoqGh4br9LViwAJvNRmRkJL/85S+5cOECSinc3d1R19ye0M3NzTGf0aNHEx8f7xguKSnhxz/+cauW4bPPPiMwMLBZ31u2bOGzzz7j0KFDrFq1ipEjR7Jw4cJm0/fo0eO6fTdmbMyl1+vR6XRNlqW+vt5pRrvdjk6nazJ89XpsLDSN41y7rmw2W5PpG8f5odeikYeHR5Nhvb75v5Mfet2une8XX3zBHXfc0aSv6+UGmrwxaFx3NpuNAQMG8M477zh+V1xcjI+PDwaDgV27dnHo0CE++ugjxo0bx5/+9CcGDx7sdFlF+5Or3USHmTRpEtu3byczM5NJkyY52keOHElOTo7jiqZ3330Xb29vAgICmkzv7u7u+Ce4f/9+Zs6cyaOPPgrAsWPHsNls3HfffRQWFnLy5EkAduzYQUVFBTqdjoceeoj/+Z//oaSkBIC33nqLKVOmtCr76dOnSU9PZ+rUqU3aT548SXR0NAMGDGD69Ok89dRTfPbZZ83yOvP+++8DcOLECb755huGDBmCj48Pp06dora2lvr6enbs2NHiurjaQw89xJYtW1BKUVdXR0ZGBg888ECrMgAEBQXx9ddfk5+fD8CpU6c4fPgww4YNa3UfP+R6r9sdd9yBTqfjwIEDwJX1MGXKlBbfmNyIoKAgzpw5w+HDhwEoKCggPDyc4uJiUlNTSU9P55FHHmHJkiXceeednDp16uYWULSZ7PmIDjN8+HBWrFjBj3/8Y+6++25H+4MPPshTTz3l+Gfj4+PDa6+91mRvAOBXv/oVa9asob6+nvnz5zNz5kx69OiB0Whk6NChfPPNN3h7e7NmzRoWLVqEm5sbgwcPRq/X0717dx566CF+97vfMXXqVHQ6HUajkfXr1zd7xw1QU1PD6NGjgSt7JZ6enixYsMBxWKjRwIEDiYyM5IknnqBHjx5069bNcQXf1XmdOXv2LI8//jg6nY41a9bg7e3Ngw8+yNChQ4mMjMRkMjF8+HA+//xz4Mo/1VdffZVZs2YRGxvr6CcpKYkVK1ZgsVior69n5MiRPPPMM617gQAfHx9efvllXnzxRWpqatDpdCQnJ9O/f/8fPAzaWtd73Tw8PHjllVdYtWoVKSkpGAwGXnnllWZ7UzfKx8eHdevWkZKSQm1tLUopUlJS6NOnD1OmTCEhIYHo6Gg8PDy4++67iYqKuullFG2jUy3tzwrxb6Kqqor09HRmz55N9+7dOXHiBNOnT2ffvn0tFhkhhGuQPR/xb81oNGIwGBg7dix6vR69Xk9aWpoUHiFcnOz5CCGE0JxccCCEEEJzUnyEEEJoToqPEEIIzUnxEUIIobkOvdrt5ZdfZseOHeh0OsaOHcvTTz/N4sWLOXr0KN27dwdg1qxZjBo1ioMHD5KcnExtbS2RkZHMnz8fuPIhsSVLllBdXU1wcDDLly9Hr9dTVFREfHw8ZWVl9O/fn9TUVG677TYqKip47rnnOHv2LD4+PqSlpWEymVqd+eLFauz29rsGo2dPI2VlzW8N0tlcNRdItrZw1VzgutlcNRe4braWcrm56bj99ttuuK8OKz4ff/wxH330ER988AENDQ08+uijhIaGcvz4cbZs2YKvr69j3JqaGhITE9m8eTO9e/dm+vTp7Nmzh9DQUOLj41mxYgVBQUEkJiaSkZHBxIkTWb58ORMnTiQqKopXX32V9PR04uPjSUtLIzg4mI0bN5KZmcnKlStJS0trdW67XbVr8Wns0xW5ai6QbG3hqrnAdbO5ai5w3WztlavDDrsNGzaMv/zlL+j1esrKyrDZbHTr1o2ioiISExOxWCysW7cOu91Ofn4+AQEB9O3bF71ej8ViIS8vj/Pnz1NTU0NQUBBw5QaUeXl51NfXc/jwYcLDw5u0w5WbSVosFuDKzQn37t3bqk+cCyGE0E6HnvMxGAysW7eOqKgoQkJCaGhoYMSIEaxatYqMjAyOHDnCtm3bKCkpaXJozNfXl+Li4mbtJpOJ4uJiLl68iNFodNx8sLEdaDKNXq/HaDTe8FMjhRBCdKwOv8PBnDlz+N3vfsczzzzDoUOHePXVVx2/i42NJTMzk/Dw8CafSFdKodPpmt2xt7G98fvVrveJdqVUs3uG/ZCePY2tHre1TCbXvG27q+YCydYWrpoLXDebq+YC183WXrk6rPh89dVX1NXVcc8999C9e3fCwsLIycnB29vbcbhMKYVer8fPzw+r1eqY1mq14uvr26y9tLQUX19ffHx8qKysxGaz4e7u7hgfruw1lZaW4ufnR0NDA9XV1a16dkujsrKqdj3WajJ5YbVWtlt/7cVVc4FkawtXzQWum81Vc4HrZmspl5ubrk1v2jvssNu5c+dISkqirq6Ouro6du3axdChQ1m1ahXfffcd9fX1vP3224waNYohQ4Zw+vRpzpw5g81mIzs7G7PZjL+/P56enhw9ehSArKwszGYzBoOB4OBgcnJyAMjMzMRsNgNXHo2bmZkJQE5ODsHBwRgMho5aTCGEEG3QYXs+oaGh5Ofn8/jjj+Pu7k5YWBizZs3i9ttvZ8KECTQ0NBAWFuZ4YuHq1auZPXs2tbW1hIaGEhERAUBqaipJSUlUVVUxaNAg4uLiAFi2bBkJCQls2LCB3r17s2bNGgDmzp1LQkICUVFReHl5kZqa2lGLKIQQoo3kxqLXkMNunU+y3ThXzQWum81Vc4HrZmvPw27ySAUhbkBdva3TTgTX1DZQWXG5U+YtRHuT4iPEDfAwuGN5NqtT5r39pdG43nthIdpG7u0mhBBCc1J8hBBCaE6KjxBCCM1J8RFCCKE5KT5CCCE0J8VHCCGE5qT4CCGE0JwUHyGEEJqT4iOEEEJzUnyEEEJoToqPEEIIzUnxEUIIoTkpPkIIITQnxUcIIYTmpPgIIYTQnBQfIYQQmpPiI4QQQnNSfIQQQmhOio8QQgjNSfERQgihuQ4tPi+//DKPPvooUVFRvPHGGwAcPHgQi8VCWFgYa9eudYxbUFBATEwM4eHhLFmyhIaGBgCKioqYNGkSERERzJgxg+rqagAqKiqYNm0akZGRTJo0CavVCkBdXR3x8fFERkYyZswYvvrqq45cRCGEEG3QYcXn448/5qOPPuKDDz7g3XffZfPmzZw8eZLExETS09PJycnh+PHj7NmzB4D4+HiWLl3Kjh07UEqRkZEBwPLly5k4cSJ5eXkMHjyY9PR0ANLS0ggODiY3N5dx48axcuVKADZv3kz37t3Jzc0lMTGRxYsXd9QiCiGEaKMOKz7Dhg3jL3/5C3q9nrKyMmw2GxUVFQQEBNC3b1/0ej0Wi4W8vDzOnz9PTU0NQUFBAMTExJCXl0d9fT2HDx8mPDy8STvA7t27sVgsAERHR7N3717q6+vZvXs3jz32GABDhw6lvLycoqKijlpMIYQQbaDvyM4NBgPr1q3j9ddfJyIigpKSEkwmk+P3vr6+FBcXN2s3mUwUFxdz8eJFjEYjer2+STvQZBq9Xo/RaKS8vLzFvr799lt++tOftipzz57Gm17ua5lMXu3eZ3tw1Vzg2tk60w+tF1deZ66azVVzgetma69cHVp8AObMmcPvfvc7nnnmGQoLC9HpdI7fKaXQ6XTY7fYW2xu/X+3a4auncXNzazZNY3trlZVVYberVo/vjMnkhdVa2W79tRdXzQWun60zXW+9uPo6c8VsrpoLXDdbS7nc3HRtetPeYYfdvvrqKwoKCgDo3r07YWFh/POf/3RcGABgtVrx9fXFz8+vSXtpaSm+vr74+PhQWVmJzWZrMj5c2WsqLS0FoKGhgerqary9venVqxclJSXN+hJCCOE6Oqz4nDt3jqSkJOrq6qirq2PXrl2MHz+e06dPc+bMGWw2G9nZ2ZjNZvz9/fH09OTo0aMAZGVlYTabMRgMBAcHk5OTA0BmZiZmsxmA0NBQMjMzAcjJySE4OBiDwUBoaChZWVkAHDlyBE9Pz1YfchNCCKGNDjvsFhoaSn5+Po8//jju7u6EhYURFRWFj48Ps2fPpra2ltDQUCIiIgBITU0lKSmJqqoqBg0aRFxcHADLli0jISGBDRs20Lt3b9asWQPA3LlzSUhIICoqCi8vL1JTUwGIjY1l6dKlREVF4eHhQUpKSkctohBCiDbSKaXa7wRHFyDnfDqfq2ezPJvVKfPe/tJoOefTjlw1F7hutn+Lcz5CCCHE9UjxEUIIoTkpPkIIITQnxUcIIYTmpPgIIYTQnBQfIYQQmpPiI4QQQnNSfIQQQmhOio8QQgjNSfERQgihOSk+QgghNCfFRwghhOak+AghhNCcFB8hhBCak+IjhBBCc1J8hBBCaE6KjxBCCM1J8RFCCKE5KT5CCCE0J8VHCCGE5qT4CCGE0FyHFp/169cTFRVFVFQUKSkpACxevJiwsDBGjx7N6NGj2blzJwAHDx7EYrEQFhbG2rVrHX0UFBQQExNDeHg4S5YsoaGhAYCioiImTZpEREQEM2bMoLq6GoCKigqmTZtGZGQkkyZNwmq1duQiCiGEaIMOKz4HDx5k//79vP/++2RmZnLixAl27tzJ8ePH2bJlC1lZWWRlZTFq1ChqampITEwkPT2dnJwcjh8/zp49ewCIj49n6dKl7NixA6UUGRkZACxfvpyJEyeSl5fH4MGDSU9PByAtLY3g4GByc3MZN24cK1eu7KhFFEII0UYdVnxMJhMJCQl4eHhgMBgYMGAARUVFFBUVkZiYiMViYd26ddjtdvLz8wkICKBv377o9XosFgt5eXmcP3+empoagoKCAIiJiSEvL4/6+noOHz5MeHh4k3aA3bt3Y7FYAIiOjmbv3r3U19d31GIKIYRoA6fF529/+1ubOr7rrrscRaOwsJDc3FxGjhzJiBEjWLVqFRkZGRw5coRt27ZRUlKCyWRyTOvr60txcXGzdpPJRHFxMRcvXsRoNKLX65u0A02m0ev1GI1GysvL27QMQgghOobe2Qhr167lkUceafMMTp06xfTp01m4cCF33HEHr776quN3sbGxZGZmEh4ejk6nc7QrpdDpdNjt9hbbG79f7drhq6dxc2v9Dl7PnsZWj9taJpNXu/fZHlw1F7h2ts70Q+vFldeZq2Zz1VzgutnaK5fT4hMYGMiGDRsIDg6mR48ejvZBgwY57fzo0aPMmTOHxMREoqKi+PzzzyksLHQcLlNKodfr8fPza3JhgNVqxdfXt1l7aWkpvr6++Pj4UFlZic1mw93d3TE+XNlrKi0txc/Pj4aGBqqrq/H29m71Cikrq8JuV60e3xmTyQurtbLd+msvrpoLXD9bZ7reenH1deaK2Vw1F7hutpZyubnp2vSm3WnxOXbsGMeOHeOdd95xtOl0Onbt2vWD0124cIGZM2eydu1aQkJCgCvFZtWqVYwYMYIePXrw9ttvM2bMGIYMGcLp06c5c+YMffr0ITs7myeeeAJ/f388PT05evQo999/P1lZWZjNZgwGA8HBweTk5GCxWMjMzMRsNgMQGhpKZmYmzzzzDDk5OQQHB2MwGG54xQghhOg4TovP3//+9zZ1vGnTJmpra1m9erWjbfz48UybNo0JEybQ0NBAWFgY0dHRAKxevZrZs2dTW1tLaGgoERERAKSmppKUlERVVRWDBg0iLi4OgGXLlpGQkMCGDRvo3bs3a9asAWDu3LkkJCQQFRWFl5cXqampbcovhBCi4+iUUj94jKm6upqXXnqJr776ipdffpk1a9awaNEibrvtNq0yakoOu3U+V89meTarU+a9/aXRctitHblqLnDdbO152M3pmfgVK1bg5eVFWVkZnp6eVFVVsXTp0huekRBCCNHIafEpKChg/vz56PV6unfvTmpqKgUFBVpkE0II0UU5Pedz7WXKNpvthi5dFkK0j7p6W6dcal1T20BlxeUO6VvcupwWn6FDh/KHP/yBmpoa9u3bx9atWxk+fLgW2YQQV/EwuHfK+abtL43G9c4+iH93TndhnnvuOXr06IGXlxdr167l7rvvZuHChVpkE0II0UU53fMxGAzMnDmTKVOmYDAY8PT01CKXEEKILszpnk9hYSFPPvkkw4cP5/777ycuLo4LFy5okU0IIUQX5bT4LF26lLFjx/Lpp5/yr3/9i1GjRpGUlKRFNiGEEF2U0+JTUVHBk08+icFgwMPDg9jYWEpLS7XIJoQQootyWnz69evHsWPHHMMnT56kX79+HRpKCCFE13bdCw4aH8hWXV3NxIkTufvuu3Fzc+PkyZMMGDBAs4BCCCG6nusWn+eff17LHEIIIW4h1y0+w4YNc/xstVr57rvvNAkkhBCi63P6OZ/k5GS2bt2Kl5cXjTfA1ul0HDp0qMPDCSGE6JqcFp+dO3eyb98+br/9di3yCCGEuAU4vdrtZz/7GT/60Y+0yCKEEOIW4XTPJzY2lsmTJzN8+HD0+v8bfdasWR0aTAghRNfltPhs3LgRo9FIZaXc11YIIUT7cFp8Ll++zFtvvaVFFiGEELcIp+d8+vfvz8mTJ7XIIoQQ4hbhdM/nwoULjB07Fn9/fzw8PBzt27dv79BgQgghui6nxWfBggVt7nz9+vXk5uYCEBoaysKFCzl48CDJycnU1tYSGRnJ/PnzASgoKGDJkiVUV1cTHBzM8uXL0ev1FBUVER8fT1lZGf379yc1NZXbbruNiooKnnvuOc6ePYuPjw9paWmYTCbq6upYsmQJx48fp1u3bqSmpsrtgIQQwsU4PewWGBjY4pczBw8eZP/+/bz//vtkZmZy4sQJsrOzSUxMJD09nZycHI4fP86ePXsAiI+PZ+nSpezYsQOlFBkZGQAsX76ciRMnkpeXx+DBg0lPTwcgLS2N4OBgcnNzGTduHCtXrgRg8+bNdO/endzcXBITE1m8eHGbV44QQoiO4bT4jBgxgpCQEMf3kJAQHnvsMacdm0wmEhIS8PDwwGAwMGDAAAoLCwkICKBv377o9XosFgt5eXmcP3+empoagoKCAIiJiSEvL4/6+noOHz5MeHh4k3aA3bt3O25+Gh0dzd69e6mvr2f37t2OfEOHDqW8vJyioqK2rR0hhBAdwulht6svNqirqyM7O5vTp0877fiuu+5y/FxYWEhubi6TJ0/GZDI52n19fSkuLqakpKRJu8lkori4mIsXL2I0Gh2fL2psB5pMo9frMRqNlJeXt9jXt99+y09/+lOnmYUQQmjDafG5moeHBzExMcTExPDss8+2appTp04xffp0Fi5ciLu7O4WFhY7fKaXQ6XTY7XZ0Ol2z9sbvV7t2+Opp3Nzcmk3T2N5aPXsaWz1ua5lMXu3eZ3tw1Vzg2tluRTf7erjq6+mqucB1s7VXLqfF59KlS46flVIcP36cioqKVnV+9OhR5syZQ2JiIlFRUXz88cdYrVbH761WK76+vvj5+TVpLy0txdfXFx8fHyorK7HZbLi7uzvGhyt7TaWlpfj5+dHQ0EB1dTXe3t706tWLkpISxwPvGvtqrbKyKux21erxnTGZvLBaXe8Duq6aC1w/263oZl4PV309XTUXuG62lnK5uena9Kb9hs/5JCQktOoKuAsXLjBz5kxSU1OJiooCYMiQIZw+fZozZ85gs9nIzs7GbDbj7++Pp6cnR48eBSArKwuz2YzBYCA4OJicnBwAMjMzMZvNwJWr5zIzMwHIyckhODgYg8FAaGgoWVlZABw5cgRPT0855CaEEC7mhs753IhNmzZRW1vL6tWrHW3jx49n9erVzJ49m9raWkJDQ4mIiAAgNTWVpKQkqqqqGDRoEHFxcQAsW7aMhIQENmzYQO/evVmzZg0Ac+fOJSEhgaioKLy8vEhNTQWu3Itu6dKlREVF4eHhQUpKSpvyCyGE6Dg61fiQnuu4fPkyeXl5fPfdd1w96tNPP93h4TqDHHbrfK6ezfJsVqfMe/tLoztl3ttfGi2H3TTmqtna87Cb0z2fhQsXcv78eQIDA697sl8IIYS4EU6Lz+eff05OTk6TxykIIYQQN8PpBQd+fn5a5BBCCHELcbo7ExgYSFxcHCNHjqRbt26O9q56zkcIIUTHc1p8qqurCQgI4JtvvtEijxBCiFuA0+KTnJysRQ4hbojXj7rTzVPOQwrx70q2XvFvqZunvtMuOxZC3LzW3/RMCCGEaCdSfIQQQmjOafGx2+38+c9/ZtGiRVRVVfHaa69hs9m0yCaEEKKLclp8UlJS+OKLL8jPzwdg3759chGCEEKIm+K0+Bw6dIjVq1fj6emJ0Wjk9ddf58CBA1pkE0II0UU5LT56vb7Jw9g8PDzkVjtCCCFuSqvucLB161ZsNhtff/01b775JgMHDtQimxBCiC7K6Z7PkiVLOHHiBGVlZUyYMIHq6moSExO1yCaEEKKLcrrnYzQaWbVqlRZZhBBC3CKcFp+vv/6aP/3pT1y6dKnJw+T++Mc/dmgwIYQQXZfT4pOQkMC9997L0KFD5WFyQggh2oXT4nP58mWSkpK0yCKEEOIW4fSCg4CAAEpKSrTIIoQQ4hbhdM/HbrcTHR3wb5ZOAAAVpklEQVTNoEGD8PT0dLTLOR8hhBBt5bT4jBo1ilGjRmmRRQghxC3iusWnqqoKo9HIww8/fFMzqKqqYvz48fzxj3+kT58+LF68mKNHj9K9e3cAZs2axahRozh48CDJycnU1tYSGRnJ/PnzASgoKGDJkiVUV1cTHBzM8uXL0ev1FBUVER8fT1lZGf379yc1NZXbbruNiooKnnvuOc6ePYuPjw9paWmYTKabWgYhhBDt67rnfGJjYwEYMWIEISEhjBgxwvEVEhLSqs6PHTvGhAkTKCwsdLQdP36cLVu2kJWVRVZWFqNGjaKmpobExETS09PJycnh+PHj7NmzB4D4+HiWLl3Kjh07UEqRkZEBwPLly5k4cSJ5eXkMHjyY9PR0ANLS0ggODiY3N5dx48axcuXKNq0YIYQQHee6xef9998H4OTJkxQUFHDy5EnHV0FBQas6z8jIYNmyZfj6+gJXrpwrKioiMTERi8XCunXrsNvt5OfnExAQQN++fdHr9VgsFvLy8jh//jw1NTUEBQUBEBMTQ15eHvX19Rw+fJjw8PAm7QC7d+/GYrEAEB0dzd69e6mvr2/j6hFCCNERnJ7zqamp4cMPP6S8vLzJh0yffvppp51fu9dRWlrKiBEjWLZsGV5eXkyfPp1t27bRo0ePJofGfH19KS4upqSkpEm7yWSiuLiYixcvYjQaHTc4bWwHmkyj1+sxGo2Ul5fTq1cvp3kBevY0tmq8G2EyebV7n+3BVXOBa2e7Fd3s6+Gqr6er5gLXzdZeuZwWnwULFvDtt98SGBh40x8y7du3L6+++qpjODY2lszMTMLDw5v0rZRCp9Nht9tbbG/8frXrZVNKNbkrtzNlZVXY7cr5iK1kMnlhtVa2W3/txVVzQeuyueqG2VXdzN+Kq/6tuWoucN1sLeVyc9O16U270+Jz6tQpduzYcUP/wK/n888/p7Cw0HG4TCmFXq/Hz88Pq9XqGM9qteLr69usvbS0FF9fX3x8fKisrMRms+Hu7u4YH67sNZWWluLn50dDQwPV1dV4e3vfdHYhhBDtx2lF6dmzJw0NDe0yM6UUq1at4rvvvqO+vp63336bUaNGMWTIEE6fPs2ZM2ew2WxkZ2djNpvx9/fH09OTo0ePApCVlYXZbMZgMBAcHExOTg4AmZmZmM1mAEJDQ8nMzAQgJyeH4OBgDAZDu+QXQgjRPq675/PGG28AV86nxMbG8utf/7rJP/HWnPO51sCBA5k2bRoTJkygoaGBsLAwoqOjAVi9ejWzZ8+mtraW0NBQIiIiAEhNTSUpKYmqqioGDRpEXFwcAMuWLSMhIYENGzbQu3dv1qxZA8DcuXNJSEggKioKLy8vUlNTbzinEEKIjnXd4vPFF18AVx6pYDQaOX36dJtn8ve//93x86RJk5g0aVKzcUJCQvjggw+atQ8cOJBt27Y1a/f392fz5s3N2r29veXuC0II4eKuW3ySk5MdPx8+fJihQ4dy6dIljhw5wiOPPKJJOCGEEF2T03M+a9euZd26dcCVy643btzo+ECnEEII0RZOi8+uXbt4/fXXAfDz82PLli2OE/1CCCFEWzgtPvX19U0uNDAYDPJQOSGEEDfF6ed87rvvPp599lnGjh2LTqcjMzOTIUOGaJFNCCFEF+V0z+f555/nJz/5CcnJyaSkpNCzZ0+WLFmiRTYhhBBdlNM9nx49erB48WItsgghhLhFOC0+n3zyCRs3buT7779HKYXdbufcuXPs3r1bg3hCCCG6IqeH3ZKSkvjFL35BVVUVFosFo9FIWFiYFtmEEEJ0UU73fHQ6HdOmTePixYvccccdWCwWnnjiCS2yCSGE6KKc7vncdtttAPTr149Tp07RrVu3drnDtRBCiFuX0z2fe++9l3nz5jF37lymT59OYWGh4yFuQgghRFs43YVJTEzkqaeeon///iQmJmK323nppZe0yCaEEKKLclp8dDod/v7+fPnll/Tp04cnn3wSu92uRTYhhBBdlNPjZ8nJyWzduhWj8f8ek6rT6Th06FCHBhNCCNF1OS0+O3fuZN++fdx+++1a5BFCCHELcHrY7Wc/+xk/+tGPtMgihBDiFuF0zyc2NpbJkyczfPjwJle5zZo1q0ODCSGE6LqcFp+NGzdiNBqprKzUIo8QQohbgNPic/nyZd566y0tsgghhLhFOD3n079/f06ePKlFFiGEELcIp8XnwoULjB07lvDwcCwWi+OrNaqqqoiOjubcuXMAHDx4EIvFQlhYGGvXrnWMV1BQQExMDOHh4SxZsoSGhgYAioqKmDRpEhEREcyYMYPq6moAKioqmDZtGpGRkUyaNAmr1QpAXV0d8fHxREZGMmbMGL766qsbWxtCCCE04bT4LFiwgNdff50XX3yR559/3vHlzLFjx5gwYQKFhYUA1NTUkJiYSHp6Ojk5ORw/fpw9e/YAEB8fz9KlS9mxYwdKKTIyMgBYvnw5EydOJC8vj8GDB5Oeng5AWloawcHB5ObmMm7cOFauXAnA5s2b6d69O7m5uSQmJspziIQQwkU5LT7Dhg1r8cuZjIwMli1bhq+vLwD5+fkEBATQt29f9Ho9FouFvLw8zp8/T01NDUFBQQDExMSQl5dHfX09hw8fJjw8vEk7wO7dux17X9HR0ezdu5f6+np2797NY489BsDQoUMpLy+nqKioDatFCCFER+qwO4Q27o00KikpwWQyOYZ9fX0pLi5u1m4ymSguLubixYsYjUbH5d2N7df2pdfrMRqNlJeXt9jXt99+y09/+tOOWkwhhBBtoNntqe12OzqdzjGslEKn0123vfH71a4dvnoaNze3ZtM0tt+Inj2Nzke6QSaTV7v32R5cNRe4drZb0c2+Hq76erpqLnDdbO2VS7Pi4+fn57gwAMBqteLr69usvbS0FF9fX3x8fKisrMRms+Hu7u4YH67sNZWWluLn50dDQwPV1dV4e3vTq1cvSkpK6NevX5O+bkRZWRV2u2qHJb7CZPLCanW9z0i5ai5oXTZX3TC7qpv5W3HVvzVXzQWum62lXG5uuja9adfsqXBDhgzh9OnTnDlzBpvNRnZ2NmazGX9/fzw9PTl69CgAWVlZmM1mDAYDwcHB5OTkAJCZmYnZbAYgNDSUzMxMAHJycggODsZgMBAaGkpWVhYAR44cwdPTUw65CSGEC9Jsz8fT05PVq1cze/ZsamtrCQ0NJSIiAoDU1FSSkpKoqqpi0KBBxMXFAbBs2TISEhLYsGEDvXv3Zs2aNQDMnTuXhIQEoqKi8PLyIjU1FbhyK6ClS5cSFRWFh4cHKSkpWi2eEEKIG9Dhxefvf/+74+eQkBA++OCDZuMMHDiQbdu2NWv39/dn8+bNzdq9vb354x//2Kzd09OT//zP/7zJxEIIITqaZofdhBBCiEZSfIQQQmhOio8QQgjNSfERQgihOSk+QgghNCfFRwghhOak+AghhNCcFB8hhBCak+IjhBBCc1J8hBBCaE6KjxBCCM1J8RFCCKE5KT5CCCE0J8VHCCGE5qT4CCGE0JxmD5MTQvx7qqu33fRjy9s6fU1tA5UVl29q3sI1SfERQvwgD4M7lmezOmXe218aTWWnzFl0NDnsJoQQQnNSfIQQQmhOio8QQgjNSfERQgihuU654CA2Npby8nL0+iuzf+GFF/jmm2/YsGEDDQ0NTJkyhUmTJgFw8OBBkpOTqa2tJTIykvnz5wNQUFDAkiVLqK6uJjg4mOXLl6PX6ykqKiI+Pp6ysjL69+9Pamoqt912W2csphBCiOvQfM9HKUVhYSFZWVmOLz8/P9auXctf//pXMjMzefvtt/nyyy+pqakhMTGR9PR0cnJyOH78OHv27AEgPj6epUuXsmPHDpRSZGRkALB8+XImTpxIXl4egwcPJj09XetFFEII4YTmxefrr78GYOrUqTz22GNs2bKFgwcPMmLECLy9venRowfh4eHk5eWRn59PQEAAffv2Ra/XY7FYyMvL4/z589TU1BAUFARATEwMeXl51NfXc/jwYcLDw5u0CyGEcC2aF5+KigpCQkJ49dVXefPNN/nv//5vioqKMJlMjnF8fX0pLi6mpKSkVe0mk4ni4mIuXryI0Wh0HM5rbBdCCOFaND/n84tf/IJf/OIXjuGxY8eSnJzMjBkzHG1KKXQ6HXa7HZ1O1+r2xu9Xu3bYmZ49jTe6SE7d7KfDO4qr5gLXzia01ZF/C678d+aq2dorl+bF58iRI9TX1xMSEgJcKRz+/v5YrVbHOFarFV9fX/z8/FrVXlpaiq+vLz4+PlRWVmKz2XB3d3eMfyPKyqqw29VNLuX/MZm8sFpd7zParpoLWpfNVTdM0f466u/0330b6Awt5XJz07XpTbvmh90qKytJSUmhtraWqqoq3n//ff7whz9w6NAhysvLuXz5Mh9++CFms5khQ4Zw+vRpzpw5g81mIzs7G7PZjL+/P56enhw9ehSArKwszGYzBoOB4OBgcnJyAMjMzMRsNmu9iEIIIZzQfM/n4Ycf5tixYzz++OPY7XYmTpzI/fffz/z584mLi6O+vp6xY8dy7733ArB69Wpmz55NbW0toaGhREREAJCamkpSUhJVVVUMGjSIuLg4AJYtW0ZCQgIbNmygd+/erFmzRutFFEII4USnfM5n3rx5zJs3r0mbxWLBYrE0GzckJIQPPvigWfvAgQPZtm1bs3Z/f382b97cfmGFEEK0O7nDgRBCCM1J8RFCCKE5KT5CCCE0Jw+TEzfF60fd6ebZ/n9Gcim1EF2bFB9xU7p56jvlKZfbXxqt+TyFEO1HDrsJIYTQnBQfIYQQmpPiI4QQQnNSfIQQQmhOio8QQgjNSfERQgihOSk+QgghNCfFRwghhOak+AghhNCcFB8hhBCak+IjhBBCc1J8hBBCaE6KjxBCCM1J8RFCCKE5KT5CCCE0J8/zEUK4rLp6W4c+WPB6fdfUNlBZcbnD5iuk+AghXJiHwb3THlZYqflcby1d8rDb9u3befTRRwkLC2Pr1q2dHUcIIcQ1utyeT3FxMWvXruW9997Dw8OD8ePHM3z4cO68887OjiaEEOL/63LF5+DBg4wYMQJvb28AwsPDycvLY9asWa2a3s1N1+6ZOqLPqxmN3fD0vPGXsr2Opfve3r1d+pH5uu68b8Vl7ujt1tXnfz3X5mprTp1SSrVHIFfx2muv8f333zN//nwA3nnnHfLz83nxxRc7OZkQQohGXe6cj91uR6f7v0qslGoyLIQQovN1ueLj5+eH1Wp1DFutVnx9fTsxkRBCiGt1ueLzwAMPcOjQIcrLy7l8+TIffvghZrO5s2MJIYS4Spe74KBXr17Mnz+fuLg46uvrGTt2LPfee29nxxJCCHGVLnfBgRBCCNfX5Q67CSGEcH1SfIQQQmhOio8QQgjNSfERQgihOSk+7aCqqoro6GjOnTsHXLnFj8ViISwsjLVr1zrGKygoICYmhvDwcJYsWUJDQ4Omud5++22io6OxWCwsXryYurq6TsnVUrZGW7ZsITY21jFcVFTEpEmTiIiIYMaMGVRXV2ue7ZNPPuHJJ58kKiqKBQsWdNp6uzbX/v37eeyxx4iOjmbhwoWOXFqvs/Xr1xMVFUVUVBQpKSmAa2wDLeVylW2gpWyNOnsbaClbh2wDStyUTz/9VEVHR6tBgwaps2fPqsuXL6vQ0FD1zTffqPr6ejV16lS1e/dupZRSUVFR6pNPPlFKKbV48WK1detWzXJ9/fXXatSoUaqyslLZ7Xa1cOFC9cYbb2ieq6VsjU6dOqVGjhypJk+e7GibNm2ays7OVkoptX79epWSkqJptsrKSvXggw+qgoICpZRS8+fPd6yfznw9lVLKbDarL7/8Uiml1OzZs1VGRoZSStt1duDAAfUf//Efqra2VtXV1am4uDi1ffv2Tt8GWsr12muvucQ20FK2Dz/8UCnV+dtAS9nee++9DtkGZM/nJmVkZLBs2TLHXRTy8/MJCAigb9++6PV6LBYLeXl5nD9/npqaGoKCggCIiYkhLy9Ps1weHh4sW7YMo9GITqcjMDCQoqIizXO1lA2grq6OpUuXMmfOHEdbfX09hw8fJjw8vNOyHThwgKCgIAYOHAhAUlISo0aN6vTXE8Bms1FVVYXNZqO2thZPT0/N15nJZCIhIQEPDw8MBgMDBgygsLCw07eBlnLV1dW5xDbQUraioiKX2AZaynb+/PkO2Qa63IdMtbZy5comwyUlJZhMJsewr68vxcXFzdpNJhPFxcWa5fL398ff3x+A8vJytm7dSnJysua5WsoG8NJLL/HEE0/Qp08fR9vFixcxGo3o9fpOy3bmzBl69OjB/Pnz+frrr7nvvvtISEjgf//3fzv19QT4/e9/T2xsLEajkT59+hAREaH5OrvrrrscPxcWFpKbm8vkyZM7fRtoKddbb73Fz372M6Bzt4HrZXOFbaClbE8//XSHbAOy59POrndjU1e54WlxcTFTpkzhiSeeYPjw4S6R68CBA1y4cIEnnniiSXtLWbTOZrPZ2L9/PwsWLOC9997j8uXLbNy4sdPXm9VqJTU1lezsbPbv38+QIUNITk7utHV26tQppk6dysKFC+nbt6/LbANX52osPK6yDVyd7fz58y61DVydraO2ASk+7ex6Nza9tr20tFTzG55+9dVXjB8/njFjxjBz5swW83ZGruzsbE6dOsXo0aNJSkri+PHjzJs3Dx8fHyorK7HZbEDn3CT2Jz/5CUOGDKFv3764u7sTGRlJfn5+p6+3I0eOEBgYSL9+/XBzc+PJJ5/k448/7pR1dvToUZ566imeffZZxowZ4zLbwLW5wHW2gWuzudI2cG22jtoGpPi0syFDhnD69GnOnDmDzWYjOzsbs9mMv78/np6eHD16FICsrCxNb3haVVXFb37zG+bOncvUqVMd7Z2dCyA5OZnc3FyysrJYsWIFgwcPJi0tDYPBQHBwMDk5OQBkZmZqnu2hhx7ixIkTXLhwAYB//OMfDBo0qNPXW2BgIPn5+ZSWlgKwa9cufv7zn2u+zi5cuMDMmTNJTU0lKioKcI1toKVcrrINtJTNVbaBlrJ11DYg53zamaenJ6tXr2b27NnU1tYSGhpKREQEAKmpqSQlJVFVVcWgQYOIi4vTLNe2bdsoLS3ljTfe4I033gDgV7/6FXPnzu3UXM4sW7aMhIQENmzYQO/evVmzZo2m8+/duzcvvPACzzzzDLW1tdxzzz0sWrQI6NzXc8CAAcydO5e4uDjc3d0JCAjghRdeALRdZ5s2baK2tpbVq1c72saPH9/p20BLuR599FGX2Aaut84mTJjQ4viu8Hp2xDYgNxYVQgihOTnsJoQQQnNSfIQQQmhOio8QQgjNSfERQgihOSk+QgghNCfFRwghhOak+AghhNCcFB8hhBCa+3/5Kf8IItau2wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "#   MACHINE VOLTAGE \n",
    "voltage= np.array(telemetry['volt'])\n",
    "print(voltage)\n",
    "print(\"Mean value:       \", voltage.mean())\n",
    "print(\"Standard deviation:\", voltage.std())\n",
    "print(\"Minimum voltage:    \", voltage.min())\n",
    "print(\"Maximum voltage:    \", voltage.max())\n",
    "\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # set plot style\n",
    "plt.hist(voltage)\n",
    "plt.title('Voltage Distribution of machines')\n",
    "plt.ylabel('machine number');\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[113.07793546  95.46052538  75.23790486 ...  94.13283675 104.08107285\n",
      "  79.09553811]\n",
      "Mean :  100.85866799107886\n",
      "Standard deviation: 11.048673087041278\n",
      "Minimum pressure: 51.23710577342529\n",
      "Maximum  pressure:  185.95199773086603\n"
     ]
    },
    {
     "data": {
      "image/png": "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NWtoa2vDMAzWrFnDNddcc9H5n3jiCd+2vF4vcXFxzJs3r8s8VquVzMxMnnjiCd8r6WeffZbg4GBuvfVWnnjiCVasWHHJms46e9qotbWV++67j1tvvRWA9PR0HnroIcLDw0lISPDNb7fbuemmm3A6nb4nfDhzWuzYsWPMmDGDzs5ORo8ejdvt/tJtn8/tdrN8+XK2bdtGe3s7LpeL5OTkHq3jUh588EGysrJ8R2pRUVH84x//ACArK4unn34al8uFYRjMnTuXcePGfeVtut1uVqxYgcvlor29naSkJKZOnYrX62XXrl0kJSUxbNgw/u3f/o0VK1Z85e1J91mMix1Tyv9Zf/7zn1mxYkWXc9kiIpei01kiImKajkRERMQ0HYmIiIhpChERETFNISIiIqYpRERExLSv9edETpxoobNz4N83cNVVNo4fbx7oMnpENfcP1dx/BmPd/VlzQICFK6/s+RdXfq1DpLPT8IsQAfymjp5Qzf1DNfefwVi3v9es01kiImKaQkRERExTiIiIiGkKERERMU0hIiIipilERETENIWIiIiY9rX+nIj4v9BvDGVISO/thnZ7aLfnbW3roKnxdK9tW+T/IoWIDKghIVZcjxcMyLbffH4aTQOyZZGvD53OEhER0xQiIiJimkJERERMU4iIiIhp3Q6R5557joyMDAAOHDhAcnIy8fHxLFmyhI6ODgCqq6tJSUkhISGB+fPn09LSAkBjYyNz5swhMTGRlJQU6urqAGhvbyc9PZ3ExESmT5/OwYMHATAMg+eee46EhASmTJnCvn37erXTIiLSO7oVInv27OH111/3Taenp5OVlcX27dsxDIO8vDwAli1bxuzZsykpKWHcuHHk5OQAsH79eqKjoykuLmbGjBmsXLkSgE2bNjF06FCKi4vJzMxk8eLFAGzfvp2DBw9SVFTEiy++yOLFi31BJSIi/uOyIfLFF1+wbt065s2bB0BVVRWtra1ERUUBkJycTElJCR6Ph/LycuLj47u0A5SWluJyuQBISkpi165deDweSktLmTp1KgATJkygoaGB6upqdu7cyZQpUwgICOC6665jxIgRfPjhh73fexER+Uou+zmRrKwsFi1axLFjxwCora3Fbrf7Hrfb7dTU1HDixAlsNhtWq7VL+/nLWK1WbDYbDQ0NF13X559/Tm1tLQ6H44L2nrrqKluPl+kr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CAoKIjo6mqKiIgDy8/OJiYkBIDY2lvz8fACKioqIjo4mKCiI2NhYCgoKANi7dy8hISE6lSUi4mdMHYmEhISwevVqFixYQFtbG7GxsSQkJADgdrtZunQpzc3NREZGkpaWBkB2djYZGRnk5uYyYsQI1q5dC8DChQvJyMjA6XQSGhqK2+0GIDU1laysLJxOJ8HBwaxZs6Y3+isiIr2oRyHyzjvv+P4/ceJE3njjjQvmGTt2LFu2bLmgfeTIkWzatOmC9rCwMF566aUL2kNCQnjuued6Up6IiPQzfWJdRERMU4iIiIhpChERETFNISIiIqYpRERExDSFiIiImKYQERER0xQiIiJimkJERERMU4iIiIhpChERETFNISIiIqYpRERExDSFiIiImKYQERER0xQiIiJimqk7G56VmppKQ0MDVuuZ1Sxfvpx//etf5Obm0tHRwf33309KSgoAZWVlrFq1ira2NhITE1m0aBEABw4cYMmSJbS0tBAdHc2yZcuwWq1UV1eTnp7O8ePHue6663C73VxxxRVfsbsiItKbTB+JGIbB4cOHKSgo8P2LiIhg3bp1vPrqq+Tn57N582b++c9/0traSmZmJjk5ORQVFbF//3527twJQHp6OllZWWzfvh3DMMjLywNg2bJlzJ49m5KSEsaNG0dOTk7v9FhERHqN6RD57LPPAHjwwQeZOnUqL7/8MmVlZdx6662EhYUxbNgw4uPjKSkpoaKigtGjRzNq1CisVisul4uSkhKqqqpobW0lKioKgOTkZEpKSvB4PJSXlxMfH9+lXURE/IvpEGlsbGTixIm8+OKL/O///i+vvfYa1dXV2O123zwOh4Oamhpqa2u71W6326mpqeHEiRPYbDbfabKz7SIi4l9MXxO5+eabufnmm33T9957L6tWrWL+/Pm+NsMwsFgsdHZ2YrFYut1+9ue5zp/ujquusvV4mb5it4cOdAniR87dHwbjvjEYa4bBWbe/12w6RPbu3YvH42HixInAmQAYOXIkdXV1vnnq6upwOBxERER0q72+vh6Hw0F4eDhNTU14vV4CAwN98/fU8ePNdHYaZrvYa+z2UOrqmga6jC/l7zvq183Z/WEw7BvnG4w1w+Csuz9rDgiwmHrhbfp0VlNTE2vWrKGtrY3m5mZef/11fv7zn7Nnzx4aGho4ffo0b731FjExMYwfP55Dhw5R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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\t#   MACHINE PRESSURE\n",
    "pressure= np.array(telemetry['pressure'])\n",
    "print(pressure)\n",
    "print(\"Mean : \", pressure.mean())\n",
    "print(\"Standard deviation:\", pressure.std())\n",
    "print(\"Minimum pressure:\", pressure.min())\n",
    "print(\"Maximum  pressure: \", pressure.max())\n",
    "\t\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # set plot style\n",
    "plt.hist(pressure)\n",
    "plt.title('pressure Distribution of machines');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[418.50407822 402.74748957 527.34982545 ... 447.81652424 413.77166996\n",
      " 496.09686958]\n",
      "Mean value:  446.60511889626366\n",
      "Standard deviation: 52.673855974052316\n",
      "Minimum pressure: 138.432075304341\n",
      "Maximum  pressure:  695.020984403396\n"
     ]
    },
    {
     "data": {
      "image/png": "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ueYaAAoLC1m0aBGdnZ0kJiaSkpICQFFREStWrKCtrY2xY8cyd+5cAPLy8sjOzmbdunWMGjWK1atXn4NyRUTkXDqr74ncf//93H///d3a3G43bre7R9/4+HheffXVHu1XXXUVmzZt6tEeGxvL+vXrz2Z4cgGI/MYwhoaf1WEoIgNI/3tlQA0Ntw/YNIeInD1d9kRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsWxQ/4311157jXXr1uHz+bjzzjvJzMwc6CFdtCK/MYyh4efvcHA4Is/btkSk/wzaEKmrq6O4uJj/+Z//YciQIcycOZMbbriB733vewM9tIvS0HA77gfKzvt2X/tF+nnfpoicO4M2RCorK7nxxhuJiooCIDk5GY/Hw3333den5UNCbP05vPPifNfg/Oaw87q9r+t2B3LbX7eau7z+Pp319seZcWenj7a2jnO+3jPV1+cRq883NmOMsbRkP3vmmWf45z//ydKlSwF4+eWXqa6u5uGHHx7gkYmIyAmD9o31QCCAzfb/k9EY0+22iIgMvEEbIjExMTQ0NARvNzQ04HQ6B3BEIiLyZYM2RG666SZ27txJc3MzX3zxBa+//joJCQkDPSwRETnJoH1jfeTIkSxdupS5c+fi9XqZPn0611xzzUAPS0RETjJo31gXEZHBb9BOZ4mIyOCnEBEREcsUIiIiYplCRERELFOIDJCnnnoKl8uFy+Vi1apVwPFLvbjdbpKSkiguLg723bt3LxkZGSQnJ7N8+XJ8Pt9ADbtPnnzySaZMmYLL5eK5554DLp7aTnj88cfJzs4GTl9DbW0tmZmZpKSksHDhQtrb2wdyyL2aM2cOLpeL9PR00tPT+eCDD3jttdeYMmUKSUlJvPDCC8G+p3s8B6M333yTjIwMUlNTeeSRR4CL43h8+eWXg49Veno61113HStXrjz/tRk579555x3zk5/8xHR2dpquri4zd+5c89prr5nExERz8OBB4/V6zbx580xFRYUxxhiXy2X+/Oc/G2OMWbZsmXnhhRcGcvhf6b333jMzZ840Xq/XfPHFF2bixIlm7969F0VtJ1RWVpobbrjBPPjgg8aY09cwf/58s2XLFmOMMU899ZRZtWrVwAy4DwKBgLnllluM1+sNtn366adm4sSJ5tixY6a9vd243W7z8ccfmy+++OK0j+dgc/DgQXPLLbeYo0ePmq6uLjNr1ixTUVFxUR2Pxhjz0UcfmcmTJ5va2trzXpvORAaAw+EgOzubIUOGEBYWxne/+11qamoYM2YMo0ePxm6343a78Xg8HDlyhI6ODiZMmABARkYGHo9ngCs4vR/+8If87ne/w26309TUhN/vp6Wl5aKoDeCzzz6juLiYBQsWAJy2Bq/Xy65du0hOTu7WPlh98sknAMybN4+pU6fy/PPPd7sI6vDhw4MXQa2urj7l4zkYvfHGG0yZMoWYmBjCwsIoLi5m2LBhF83xeMJ//dd/sXTpUg4dOnTea1OIDIArrrgi+GDW1NSwdetWbDYbDocj2MfpdFJXV0d9fX23dofDQV1d3Xkf85kICwtj7dq1uFwu4uPje9RwIdeWm5vL0qVL+cY3vgFw2hqOHTtGREQEdru9W/tg1dLSQnx8PE8//TS//e1v2bBhA7W1tX163E60D0YHDhzA7/ezYMEC0tPTefHFFy+q4xGOT811dHSQmpo6ILUpRAbQxx9/zLx58/j5z3/O6NGjT3nByQv1QpSLFy9m586dHD16lJqamouitpdffplRo0YRHx8fbDtdDaeqZTDXdu2117Jq1SoiIyOJjo5m+vTprF279oJ/3Px+Pzt37uTRRx/lpZdeorq6mkOHDl3wdZ1sw4YN3H333cDpj8f+rG3QXvbkYldVVcXixYvJycnB5XLx/vvvn/KCk1++EGVjY+OgvhDlvn376Orq4uqrr2bYsGEkJSXh8XgIDQ0N9rlQaysvL6ehoYH09HQ+//xz/vnPf2Kz2U5ZQ3R0NK2trfj9fkJDQwf9BUR3796N1+sNBqQxhtjY2D4dk4O5tm9961vEx8cTHR0NwI9//OOL5ngE6OrqYteuXRQWFgKnv3Btf9amM5EBcPToUe69916KiopwuVwAjB8/nv379wdPv7ds2UJCQgKxsbGEh4dTVVUFQFlZ2aC+EOXhw4dZsWIFXV1ddHV18cc//pGZM2deFLU999xzbNmyhbKyMhYvXsykSZN47LHHTllDWFgYcXFxlJeXA1BaWjqoa2ttbWXVqlV0dnbS1tbG5s2beeKJJ055EdTTHauD0cSJE3n77bdpaWnB7/fz1ltvkZKSclEcjwAffvgh//qv/8rw4cOBgXke0ZnIAHj22Wfp7OwMvnoAmDlzJoWFhSxatIjOzk4SExNJSUkBoKioiBUrVtDW1sbYsWOZO3fuQA29V4mJiVRXVzNt2jRCQ0NJSkrC5XIRHR19wdd2OqerIS8vj+zsbNatW8eoUaNYvXr1AI/09CZOnMgHH3zAtGnTCAQCzJ49m+uuu+60F0E93bE62IwfP56f/vSnzJ49G6/Xy80338ysWbO4/PLLL4rj8dChQ8TExARvh4eHn/fnEV2AUURELNN0loiIWKYQERERyxQiIiJimUJEREQsU4iIiIhlChEREbFMISIiIpYpRERExLL/B8KbEHHC2s4MAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#   MACHINE ROTATION\n",
    "rotate= np.array(telemetry['rotate'])\n",
    "print(rotate)\n",
    "print(\"Mean value: \",rotate.mean())\n",
    "print(\"Standard deviation:\", rotate.std())\n",
    "print(\"Minimum pressure:\", rotate.min())\n",
    "print(\"Maximum  pressure: \", rotate.max())\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # set plot style\n",
    "plt.hist(rotate)\n",
    "plt.title('rotate Distribution of machines');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[45.08768576 43.41397268 34.17884712 ... 48.31456103 44.83525866\n",
      " 37.84524546]\n",
      "Mean value:  40.38500676114475\n",
      "Standard deviation: 5.370357496793103\n",
      "Minimum pressure: 14.877053998383\n",
      "Maximum  pressure:  76.7910723016723\n",
      "[45.08768576 43.41397268 34.17884712 ... 48.31456103 44.83525866\n",
      " 37.84524546]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEJCAYAAABVFBp5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X90VPWd//HnJBMimLg0dIYgRbba9qhQwDVQU2hSbMkPJ2MgC1tImtSyFaUKyFokhJiIFo2YgqAE267bbhEXEEuiMQlaLbA2WDD1SONS1yJBSDA/CJtfkmQy8/n+wcl8iSCEm8Qk+Hqcwwn3k8+99/O+M5PX3Htn7rUZYwwiIiIWBPT3AEREZPBSiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphCRC/rrX//K4sWLAUhPT+fZZ5/t0fKamppIS0vzTycmJtLY2NijZV5Meno63/nOd0hMTCQxMZHbbruNrKwsamtrAaiurmbu3LkXXMaxY8dYtGjReX939vxPPfUUDz/88CWPMTMzk/LycgBWrlxJaWnpJS/jUr355ptMnz6d2bNn09ra2ufrgwtvnzvvvJO///3vn8s4pPcoROSCvvnNb7Jhw4ZeW15DQwN//etf/dMFBQVcddVVvbb8z3LHHXdQUFBAQUEBr7zyCldffTU/+clP8Hq9jBw5kq1bt15w/qqqKo4cOXLe33Vn/ospLS2l8ytbq1ev5tvf/naPltcdr7zyCnPmzGHHjh1cccUVfb6+i/n1r3/N1772tf4ehlwie38PQAaG+++/n3HjxjF//nwAnn/+efbv38+8efN45JFHKCwsBKCsrIxdu3bR3NzM1KlTWb58OXa7nfHjx/O9732Pv/3tb+Tm5vL++++zbds2PB4PDQ0N3HnnnSQnJ7NixQpaW1tJTEzk97//PTfeeCP79u0jLCyMjRs38sorrxAYGMhXv/pVHnzwQRwOB6mpqUyaNIm//OUvnDhxgsjISB555BF8Ph+PPPIIf/nLXwgKCuIrX/kKjz32GFdeeeUFa7XZbNx9993s3LmTP/3pT1x77bW43W7eeecdDh8+zMqVK2lvb8cYw+zZs5k7dy6ZmZlUV1fzr//6r6xatYqUlBSuu+46KisrycnJYf78+bzzzjsAHD58mJSUFBoaGrjhhhvIzs4mJCSEW2+9lfXr1/PNb34TwD/9hz/8gZqaGn72s5+xZs0acnNzSUlJIS4ujj/84Q88/fTT+Hw+rrzySlasWMGECRN46qmnqKyspLa2lsrKSkaOHMkTTzyB0+nsUqvH4yEnJ4d9+/YRGBjIhAkTWLFiBVu3buX1118nODiYpqYmli9f7p/n+PHj/OhHP2Lq1KmUl5fj9XpZvHgx27Zt48MPP2T8+PGsXbuWgIAAnnnmGV5//XVaW1s5ffo0y5cvZ8aMGXR0dPDEE0+we/duAgMDuemmm8jOzgbgww8/JDU1ldraWr785S+zdu1anE6nf3t88sknrFu3jjFjxvDBBx/Q0dHBqlWruPnmm2lvbyc3N5cDBw7g9Xq58cYbyczMJCQkhOeff56tW7cSFBREcHAwDz/8sELp82BEjDH79u0zCQkJ/unZs2ebP/3pT+att94yLpfLGGPM8uXLzaxZs0xLS4tpa2szP/zhD82WLVuMMcZ84xvfMDt37jTGGNPc3Gz+5V/+xdTX1xtjjHnnnXfMpEmTjDHGHDt2zP//zvlOnjxpduzYYX7wgx+YlpYWY4wxGzZsMPPnzzfGGPPDH/7QLF682Hi9XtPU1GSmTZtm9u3bZw4cOGDi4uKMz+czxhizZs0aU1ZWdk5ty5cvN//+7/9+TvuiRYvMr3/96y5jWrFihfnlL39pjDGmpqbG3Hfffcbr9XbZDseOHTPf+MY3zIEDB86pacOGDea73/2uOXnypPH5fOb+++83a9asMcYYM336dHPw4EH/+s+ePvv/P/zhD01xcbH5+9//br797W+bjz76yBhjTGlpqZk6dappamoyGzZsMN/73vdMU1OTMcaYu+66y6xfv/6cGtevX2/uvfde097ebrxer0lPTzcPPvjgBbdLZ31/+MMfjDHGZGVlmenTp5umpibT2tpqpk6dasrKyszx48dNamqqOX36tDHGmMLCQv9z6D//8z9NSkqKOX36tPF6vWbJkiVm586dZsOGDebWW281J0+eNMYYs3DhQvP000932QZvvfWWueGGG8z//M//GGOMefbZZ01KSooxxpinnnrK5OTk+B/zX/ziFyY7O9t0dHSYcePGmerqamOMMTt37jRbt249pzbpfdoTEQC+9a1v0dbWxl//+leGDh1KfX09kZGR7N+/v0u/xMREhg0bBsDtt9/Onj17SE5OBiAiIgKAK6+8kmeeeYY9e/ZQUVHB3/72Nz755JMLrn/v3r0kJSX5l52WlsYzzzxDe3s7ANOnTycgIICQkBDGjh1LQ0MDkZGRBAYGMmfOHKZNm0ZsbCwTJkzods02m42hQ4d2aZsxYwbLly/n4MGDREZGkpmZSUDAuUd97XY7kyZNOu9yZ8yYQVhYGAD//M//zJo1a7o9prO99dZb3HLLLYwZMwaAyMhIwsLC/OdOpkyZQkhICAA33ngjDQ0N5yxj7969LF26lKCgIABSU1O55557LrruoKAgbr31VgCuueYabrrpJv+6nE4nDQ0N/NM//RNr1qzh5Zdf5ujRo7z77ru0tLQAZw7PJSYm+g+TPfnkk8CZcyJTp071b5/rr7+e+vr6c9Z/9dVXc8MNN/hr27lzJwC7d++mqanJf87I4/EwYsQIAgMDiYuLY+7cuXz3u99l2rRpREdHX7RO6TmdExHgzB/U2bNnU1BQwIsvvsjs2bOx2Wzn9AsMDPT/3xiD3f7/34d0BsDHH3/MzJkzqays5Oabb+a+++676Pp9Pl+X9fl8Pjo6OvzTZx+zt9lsGGO46qqrKCgoYPny5QQGBnLfffexZcuWbtVrjOG9997jG9/4Rpf26dOns2vXLuLj4zl06BBut5uPP/74nPmHDBnSpfaznb2NfD5fl37mrEvVdQbkZ/n0Numcv3O7nG+bXGwZPp8Pj8dzwfXCmRA5e77OEDrbe++9xw9+8AP/oc2f/OQn/t99etvU1dVRU1Nzzu8+a9yfVZvP5yMjI8N/fuuFF15g/fr1AOTm5vLMM89wzTXX8Ktf/Yp/+7d/u2id0nMKEfGbNWsWb7zxBrt27SIpKem8fV555RXa29tpa2tj586dREVFndOnvLycsLAwfvrTnzJt2jT++Mc/AuD1erHb7Xi93nP+cHznO9/hxRdf9O+xbN68mcmTJzNkyJDPHO8f//hH7rjjDm666SYWLVrEzJkz/e/SL8Tr9bJx40a+9KUvMXny5C6/u//++ykqKsLlcvnPZXz00UcEBgZ2648vwBtvvEFDQwNer5ft27f7t9HZexF//vOf/Z8OgzPBc3Zowpk9jzfffJNjx44BsG/fPk6cOMHEiRO7NQ44s13/67/+C4/Hg8/nY8uWLUydOrXb81/IgQMHGD9+PD/+8Y+ZMmUKr7/+Ol6v1z/2wsJC2tvb8fl8PPTQQ7zyyis9Xue0adPYsmWLf7kPPvgga9eupb6+nujoaIYPH84dd9zBfffd1+UDHNJ3dDhL/BwOBzfeeCMdHR2MHDnyvH2+8pWvkJycTEtLCzNmzGDWrFnn9Jk6dSo7duwgLi4Om83GlClTCAsL4+jRo4wdO5YJEybgcrm67DXMnj2bEydOMGfOHHw+H2PHjiU3N/eC442KimLv3r0kJCQwbNgw/uEf/oFHHnnkvH1/+9vf8tJLL2Gz2fB6vXzzm9/kV7/61Tn9fvrTn7Jy5Uq2bdtGYGAg3//+95k8eTINDQ0EBwcze/Zs1q1bd8FxXXfdddx11100NjZy8803s2DBAgB+9rOf8dBDD7Ft2zbGjRvHuHHj/PPMmDGDZcuW8dBDD/nbvva1r5Gdnc29996L1+vliiuu4JlnniE0NPSC6z/bwoULefzxx5k5cyYdHR1MmDCBBx98sNvzX0hCQgKvvvoq8fHx+Hw+pk+fTkNDA83NzcydO5fKykqSkpIwxjBlyhRSU1PZtGlTj9b505/+lMcff5xZs2bh9Xq54YYbSE9PJyQkhIULF3LHHXdwxRVXEBgYyM9//vNeqVMuzGbOty8pIiLSDTqcJSIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCy7bL8ncupUCz7fwP308ogRIZw82dzfw+gR1TAwqIaBYzDXERBg40tfuvDFS8/nsg0Rn88M6BABBvz4ukM1DAyqYeC4XOroLh3OEhERyxQiIiJimUJEREQs61aIrF+/nttuuw2Xy8VvfvMbAFasWEFMTIz/vtWvvfYacOY+Am63m5iYmC4Xqjt06BBJSUnExsaycuVK/xVLq6qq/HdxW7hwof9+BI2NjSxYsID4+HhSUlK6XPFUREQGhouGyP79+3nrrbd46aWXePHFF9m8eTMffvgh5eXlPPfcc/7r+s+YMYPW1lYyMjLIy8ujqKiI8vJy9uzZA8CyZcvIyspi165dGGPYvn07AKtWrSI5OZmSkhLGjx9PXl4ecOYmNhERERQXFzNnzhxWr17dh5tBRESsuGiITJkyhd/97nfY7XZOnjzpvyR1VVUVGRkZuN1uNmzYgM/n4+DBg4wdO5YxY8Zgt9txu92UlJRQWVlJa2ur/05wSUlJlJSU4PF4OHDgALGxsV3a4cwdzNxuN3DmktN79+7t9v0cRETk89Gtw1lBQUFs2LABl8tFZGQkHR0d3HLLLTz66KNs376dt99+mx07dlBTU4PD4fDP53Q6qa6uPqfd4XBQXV3NqVOnCAkJ8d/prLMd6DKP3W4nJCTkvLfRFBGR/tPt74ksXryYO++8k7vvvpt9+/axceNG/+9SU1PJz88nNja2yy01jTHYbLZzbtHZ2d7582znuyVr5zznu9f1ZxkxIqTbffuLw9H9mwsNVIO1hnaPlyFBZ25j+3nXcPa6e8tgfRzOdjnUAJdPHd110RA5fPgw7e3t3HDDDQwdOpSYmBiKiooYPny4/zBU5722w8PDu5wAr62txel0ntNeV1eH0+kkLCyMpqYmvF4vgYGB/v5wZi+mrq6O8PBwOjo6aGlpYfjw4d0u7OTJ5gH9pR+HI5Ta2qb+HkaPDOYaHI5Q3PcX9Mu6X/5FYq9ut8H8OHS6HGqAwV1HQIDN0pvvi761P378OJmZmbS3t9Pe3s7rr7/O5MmTefTRR2loaMDj8bBt2zZmzJjBxIkTOXLkCEePHsXr9VJYWEhUVBSjR48mODiYsrIyAAoKCoiKiiIoKIiIiAiKiooAyM/P99+POjo6mvz8fACKioqIiIggKCjokgsUEZG+c9E9kejoaA4ePMjMmTMJDAwkJiaGe++9ly996UvMmzePjo4OYmJiSEhIACAnJ4dFixbR1tZGdHQ0cXFxAOTm5pKZmUlzczPjxo0jLS0NgOzsbNLT09m0aROjRo1i7dq1ACxZsoT09HRcLhehoaEXvd+2iIh8/i7be6zrcFbfG8w16HDWwHI51ACDu44+O5wlIiLyWRQiIiJimUJEREQsU4iIiIhlChEREbFMISIiIpYpRERExDKFiIiIWKYQERERyxQiIiJimUJEREQsU4iIiIhlChEREbFMISIiIpZ1+/a4In0h9KqhXBGsp6HIYKVXr/SrK4Lt/XJfj5d/kfi5r1PkcqTDWSIiYplCRERELFOIiIiIZQoRERGxTCEiIiKWdStE1q9fz2233YbL5eI3v/kNAKWlpbjdbmJiYli3bp2/76FDh0hKSiI2NpaVK1fS0dEBQFVVFSkpKcTFxbFw4UJaWloAaGxsZMGCBcTHx5OSkkJtbS0A7e3tLFu2jPj4eGbNmsXhw4d7tXAREem5i4bI/v37eeutt3jppZd48cUX2bx5M3/729/IyMggLy+PoqIiysvL2bNnDwDLli0jKyuLXbt2YYxh+/btAKxatYrk5GRKSkoYP348eXl5ADz55JNERERQXFzMnDlzWL16NQCbN29m6NChFBcXk5GRwYoVK/pqG4iIiEUXDZEpU6bwu9/9DrvdzsmTJ/F6vTQ2NjJ27FjGjBmD3W7H7XZTUlJCZWUlra2tTJo0CYCkpCRKSkrweDwcOHCA2NjYLu0Au3fvxu12A5CQkMDevXvxeDzs3r2b22+/HYDJkydTX19PVVVVn2wEERGxpltfNgwKCmLDhg38x3/8B3FxcdTU1OBwOPy/dzqdVFdXn9PucDiorq7m1KlThISEYLfbu7QDXeax2+2EhIRQX19/3mV9/PHHXH311d0qbMSIkG71608OR2h/D6HHLoca+kNvb7fL4XG4HGqAy6eO7ur2N9YXL17MnXfeyd13301FRQU2m83/O2MMNpsNn8933vbOn2f79PTZ8wQEBJwzT2d7d5082YzPZ7rd//PmcIRSW9vU38Pokd6o4Yv2guvUm4+9nksDx2CuIyDAZunN90X/Kh8+fJhDhw4BMHToUGJiYvjzn//sPwEOUFtbi9PpJDw8vEt7XV0dTqeTsLAwmpqa8Hq9XfrDmb2Yuro6ADo6OmhpaWH48OGMHDmSmpqac5YlIiIDx0VD5Pjx42RmZtLe3k57ezuvv/46c+fO5ciRIxw9ehSv10thYSFRUVGMHj2a4OBgysrKACgoKCAqKoqgoCAiIiIoKioCID8/n6ioKACio6PJz88HoKioiIiICIKCgoiOjqag4Mw1ld5++22Cg4O7fShLREQ+Hxc9nBUdHc3BgweZOXMmgYGBxMTE4HK5CAsLY9GiRbS1tREdHU1cXBwAubm5ZGZm0tzczLhx40hLSwMgOzub9PR0Nm3axKhRo1i7di0AS5YsIT09HZfLRWhoKLm5uQCkpqaSlZWFy+ViyJAhrFmzpq+2gYiIWGQzxgzcEwc9oHMifa+3zon011V8+2O9nevWOZGuLocaYHDX0WfnRERERD6LQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsaxbIfL000/jcrlwuVysWbMGgBUrVhATE0NiYiKJiYm89tprAJSWluJ2u4mJiWHdunX+ZRw6dIikpCRiY2NZuXIlHR0dAFRVVZGSkkJcXBwLFy6kpaUFgMbGRhYsWEB8fDwpKSnU1tb2auEiItJzFw2R0tJS3nzzTXbu3El+fj7vvfcer732GuXl5Tz33HMUFBRQUFDAjBkzaG1tJSMjg7y8PIqKiigvL2fPnj0ALFu2jKysLHbt2oUxhu3btwOwatUqkpOTKSkpYfz48eTl5QHw5JNPEhERQXFxMXPmzGH16tV9uBlERMSKi4aIw+EgPT2dIUOGEBQUxHXXXUdVVRVVVVVkZGTgdrvZsGEDPp+PgwcPMnbsWMaMGYPdbsftdlNSUkJlZSWtra1MmjQJgKSkJEpKSvB4PBw4cIDY2Ngu7QC7d+/G7XYDkJCQwN69e/F4PH21HURExAL7xTp8/etf9/+/oqKC4uJitmzZwv79+8nOziY0NJS77rqLHTt2MGzYMBwOh7+/0+mkurqampqaLu0Oh4Pq6mpOnTpFSEgIdru9SzvQZR673U5ISAj19fWMHDmydyoXEZEeu2iIdPrggw+46667eOCBB7j22mvZuHGj/3epqank5+cTGxuLzWbztxtjsNls+Hy+87Z3/jzbp6fPnicgoPufAxgxIqTbffuLwxHa30Poscuhhv7Q29vtcngcLoca4PKpo7u6FSJlZWUsXryYjIwMXC4X77//PhUVFf7DUMYY7HY74eHhXU6A19bW4nQ6z2mvq6vD6XQSFhZGU1MTXq+XwMBAf384sxdTV1dHeHg4HR0dtLS0MHz48G4XdvJkMz6f6Xb/z5vDEUptbVN/D6NHeqOGL9oLrlNvPvZ6Lg0cg7mOgACbpTffF31rf+LECe655x5yc3NxuVzAmdB49NFHaWhowOPxsG3bNmbMmMHEiRM5cuQIR48exev1UlhYSFRUFKNHjyY4OJiysjIACgoKiIqKIigoiIiICIqKigDIz88nKioKgOjoaPLz8wEoKioiIiKCoKCgSy5QRET6zkX3RJ599lna2trIycnxt82dO5cFCxYwb948Ojo6iImJISEhAYCcnBwWLVpEW1sb0dHRxMXFAZCbm0tmZibNzc2MGzeOtLQ0ALKzs0lPT2fTpk2MGjWKtWvXArBkyRLS09NxuVyEhoaSm5vb68WLiEjP2IwxA/eYTw/ocFbf663DWe77C3ppRN338i8S+2W9nevW4ayuLocaYHDX0WeHs0RERD6LQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIilnUrRJ5++mlcLhcul4s1a9YAUFpaitvtJiYmhnXr1vn7Hjp0iKSkJGJjY1m5ciUdHR0AVFVVkZKSQlxcHAsXLqSlpQWAxsZGFixYQHx8PCkpKdTW1gLQ3t7OsmXLiI+PZ9asWRw+fLhXCxcRkZ67aIiUlpby5ptvsnPnTvLz83nvvfcoLCwkIyODvLw8ioqKKC8vZ8+ePQAsW7aMrKwsdu3ahTGG7du3A7Bq1SqSk5MpKSlh/Pjx5OXlAfDkk08SERFBcXExc+bMYfXq1QBs3ryZoUOHUlxcTEZGBitWrOirbSAiIhZdNEQcDgfp6ekMGTKEoKAgrrvuOioqKhg7dixjxozBbrfjdrspKSmhsrKS1tZWJk2aBEBSUhIlJSV4PB4OHDhAbGxsl3aA3bt343a7AUhISGDv3r14PB52797N7bffDsDkyZOpr6+nqqqqTzaCiIhYc9EQ+frXv+4PhYqKCoqLi7HZbDgcDn8fp9NJdXU1NTU1XdodDgfV1dWcOnWKkJAQ7HZ7l3agyzx2u52QkBDq6+vPu6yPP/64F0oWEZHeYu9uxw8++IC77rqLBx54gMDAQCoqKvy/M8Zgs9nw+XzYbLZz2jt/nu3T02fPExAQcM48ne3dNWJESLf79heHI7S/h9Bjl0MN/aG3t9vl8DhcDjXA5VNHd3UrRMrKyli8eDEZGRm4XC7279/vPwEOUFtbi9PpJDw8vEt7XV0dTqeTsLAwmpqa8Hq9BAYG+vvDmb2Yuro6wsPD6ejooKWlheHDhzNy5Ehqamq45ppruiyru06ebMbnM93u/3lzOEKprW3q72H0SG/U8EV7wXXqzcdez6WBYzDXERBgs/Tm+6Jv7U+cOME999xDbm4uLpcLgIkTJ3LkyBGOHj2K1+ulsLCQqKgoRo8eTXBwMGVlZQAUFBQQFRVFUFAQERERFBUVAZCfn09UVBQA0dHR5OfnA1BUVERERARBQUFER0dTUFAAwNtvv01wcDBXX331JRcoIiJ956J7Is8++yxtbW3k5OT42+bOnUtOTg6LFi2ira2N6Oho4uLiAMjNzSUzM5Pm5mbGjRtHWloaANnZ2aSnp7Np0yZGjRrF2rVrAViyZAnp6em4XC5CQ0PJzc0FIDU1laysLFwuF0OGDPF/tFhERAYOmzFm4B7z6QEdzup7vXU4y31/QS+NqPte/kViv6y3c906nNXV5VADDO46+uxwloiIyGdRiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsUwhIiIililERETEsm6HSHNzMwkJCRw/fhyAFStWEBMTQ2JiIomJibz22msAlJaW4na7iYmJYd26df75Dx06RFJSErGxsaxcuZKOjg4AqqqqSElJIS4ujoULF9LS0gJAY2MjCxYsID4+npSUFGpra3utaBER6R3dCpF3332XefPmUVFR4W8rLy/nueeeo6CggIKCAmbMmEFraysZGRnk5eVRVFREeXk5e/bsAWDZsmVkZWWxa9cujDFs374dgFWrVpGcnExJSQnjx48nLy8PgCeffJKIiAiKi4uZM2cOq1ev7uXSRUSkp7oVItu3byc7Oxun0wnA6dOnqaqqIiMjA7fbzYYNG/D5fBw8eJCxY8cyZswY7HY7brebkpISKisraW1tZdKkSQAkJSVRUlKCx+PhwIEDxMbGdmkH2L17N263G4CEhAT27t2Lx+Pp9Q0gIiLW2bvT6dN7AXV1ddxyyy1kZ2cTGhrKXXfdxY4dOxg2bBgOh8Pfz+l0Ul1dTU1NTZd2h8NBdXU1p06dIiQkBLvd3qUd6DKP3W4nJCSE+vp6Ro4c2a3CRowI6Va//uRwhPb3EHrscqihP/T2drscHofLoQa4fOrorm6FyKeNGTOGjRs3+qdTU1PJz88nNjYWm83mbzfGYLPZ8Pl8523v/Hm2T0+fPU9AQPc/B3DyZDM+n+l2/8+bwxFKbW1Tfw+jR3qjhi/aC65Tbz72ei4NHIO5joAAm6U335Y+nfX++++za9cu/7QxBrvdTnh4eJcT4LW1tTidznPa6+rqcDqdhIWF0dTUhNfr7dIfzuzF1NXVAdDR0UFLSwvDhw+3MlwREekjlkLEGMOjjz5KQ0MDHo+Hbdu2MWPGDCZOnMiRI0c4evQoXq+XwsJCoqKiGD16NMHBwZSVlQFQUFBAVFQUQUFBREREUFRUBEB+fj5RUVEAREdHk5+fD0BRUREREREEBQX1Rs0iItJLLB3Ouv7661mwYAHz5s2jo6ODmJgYEhISAMjJyWHRokW0tbURHR1NXFwcALm5uWRmZtLc3My4ceNIS0sDIDs7m/T0dDZt2sSoUaNYu3YtAEuWLCE9PR2Xy0VoaCi5ubm9Ua+IiPQimzFm4J446AGdE+l7vXVOxH1/QS+NqPte/kViv6y3c906J9LV5VADDO46Ptf9cPp6AAAOnUlEQVRzIiIiIqAQERGRHlCIiIiIZQoRERGxTCEiIiKWKURERMQyhYiIiFimEBEREcsUIiIiYplCRERELFOIiIiIZQoRERGxTCEiIiKWKURERMQyhYiIiFimEBEREcsUIiIiYplCRERELLN0j3URsa7d48XhCO3VZXZnea1tHTQ1nu7V9YooREQ+Z0OCAvvtvvKD8+7fMpB163BWc3MzCQkJHD9+HIDS0lLcbjcxMTGsW7fO3+/QoUMkJSURGxvLypUr6ejoAKCqqoqUlBTi4uJYuHAhLS0tADQ2NrJgwQLi4+NJSUmhtrYWgPb2dpYtW0Z8fDyzZs3i8OHDvVq0iIj0jouGyLvvvsu8efOoqKgAoLW1lYyMDPLy8igqKqK8vJw9e/YAsGzZMrKysti1axfGGLZv3w7AqlWrSE5OpqSkhPHjx5OXlwfAk08+SUREBMXFxcyZM4fVq1cDsHnzZoYOHUpxcTEZGRmsWLGiL2oXEZEeumiIbN++nezsbJxOJwAHDx5k7NixjBkzBrvdjtvtpqSkhMrKSlpbW5k0aRIASUlJlJSU4PF4OHDgALGxsV3aAXbv3o3b7QYgISGBvXv34vF42L17N7fffjsAkydPpr6+nqqqqt6vXkREeuSi50Q69w461dTU4HA4/NNOp5Pq6upz2h0OB9XV1Zw6dYqQkBDsdnuX9k8vy263ExISQn19/XmX9fHHH3P11Vf3oFQREeltl3xi3efzYbPZ/NPGGGw222e2d/4826enz54nICDgnHk62y/FiBEhl9S/P/T2J3T6w+VQwxfJQH68BvLYLsXlUkd3XXKIhIeH+0+AA9TW1uJ0Os9pr6urw+l0EhYWRlNTE16vl8DAQH9/OLMXU1dXR3h4OB0dHbS0tDB8+HBGjhxJTU0N11xzTZdlXYqTJ5vx+cyllve5cThCqa0d3J+V6Y0avmgvuP42UJ9zl8PrAQZ3HQEBNktvvi/5y4YTJ07kyJEjHD16FK/XS2FhIVFRUYwePZrg4GDKysoAKCgoICoqiqCgICIiIigqKgIgPz+fqKgoAKKjo8nPzwegqKiIiIgIgoKCiI6OpqDgzEcg3377bYKDg3UoS0RkALrkPZHg4GBycnJYtGgRbW1tREdHExcXB0Bubi6ZmZk0Nzczbtw40tLSAMjOziY9PZ1NmzYxatQo1q5dC8CSJUtIT0/H5XIRGhpKbm4uAKmpqWRlZeFyuRgyZAhr1qzprXpFRKQXdTtE3njjDf//IyMjeemll87pc/3117Njx45z2kePHs3mzZvPaR8+fDjPPPPMOe3BwcE8/vjj3R2aiIj0E107S0RELFOIiIiIZQoRERGxTCEiIiKWKURERMQyhYiIiFimEBEREcsUIiIiYplCRERELNPtcQWA0KuGckXwpT8ddAFFkS82hYgAcEWwvd/u+y0ig5cOZ4mIiGUKERERsUwhIiIililERETEMoWIiIhYphARERHLFCIiImKZQkRERCxTiIiIiGUKERERsaxHlz1JTU2lvr4eu/3MYh5++GE++ugjNm3aREdHBz/60Y9ISUkBoLS0lMcee4y2tjbi4+NZunQpAIcOHWLlypW0tLQQERHBqlWrsNvtVFVVsWzZMk6ePMlXv/pVcnNzufLKK3tYroiI9CbLeyLGGCoqKigoKPD/Cw8PZ926dTz//PPk5+ezbds2/v73v9Pa2kpGRgZ5eXkUFRVRXl7Onj17AFi2bBlZWVns2rULYwzbt28HYNWqVSQnJ1NSUsL48ePJy8vrnYpFRKTXWA6RDz/8EID58+dz++2389xzz1FaWsott9zC8OHDGTZsGLGxsZSUlHDw4EHGjh3LmDFjsNvtuN1uSkpKqKyspLW1lUmTJgGQlJRESUkJHo+HAwcOEBsb26VdREQGFssh0tjYSGRkJBs3buS3v/0tW7dupaqqCofD4e/jdDqprq6mpqamW+0Oh4Pq6mpOnTpFSEiI/zBZZ7uIiAwsls+J3HTTTdx0003+6dmzZ/PYY4+xcOFCf5sxBpvNhs/nw2azdbu98+fZPj19MSNGhFxqSZ873YtDPm8D+Tk3kMd2KS6XOrrLcoi8/fbbeDweIiMjgTMBMHr0aGpra/19amtrcTqdhIeHd6u9rq4Op9NJWFgYTU1NeL1eAgMD/f0vxcmTzfh8xmp5fc7hCKW2tqm/h+H3RXvif1ENpOfc2Qba68GqwVxHQIDN0ptvy4ezmpqaWLNmDW1tbTQ3N7Nz506eeOIJ9u3bR319PadPn+bVV18lKiqKiRMncuTIEY4ePYrX66WwsJCoqChGjx5NcHAwZWVlABQUFBAVFUVQUBAREREUFRUBkJ+fT1RUlNWhiohIH7G8JzJ9+nTeffddZs6cic/nIzk5mZtvvpmlS5eSlpaGx+Nh9uzZTJgwAYCcnBwWLVpEW1sb0dHRxMXFAZCbm0tmZibNzc2MGzeOtLQ0ALKzs0lPT2fTpk2MGjWKtWvX9kK5IiLSm3r0PZH77ruP++67r0ub2+3G7Xaf0zcyMpKXXnrpnPbrr7+eHTt2nNM+evRoNm/e3JPhiYhIH9M31kVExDKFiIiIWKYQERERyxQiIiJimUJEREQsU4iIiIhlChEREbFMISIiIpYpRERExDKFiIiIWKYQERERyxQiIiJimUJEREQsU4iIiIhlChEREbGsR/cTEZHBo93j7bfbILe2ddDUeLpf1i19SyEi8gUxJCgQ9/0F/bLul3+RyOC887hcjA5niYiIZQoRERGxTCEiIiKWKURERMSyAR0iL7/8MrfddhsxMTFs2bKlv4cjIiKfMmA/nVVdXc26dev4/e9/z5AhQ5g7dy7f+ta3+NrXvtbfQ+szoVcN5YrgAfuQiIicY8D+xSotLeWWW25h+PDhAMTGxlJSUsK9997brfkDAmx9Obxe8ekxXhFs519//mq/jOXZzBicXxraL+v+oq23P9fdX+vtzndU+uI7LG1tHTQ3t/b6ci9kMPztOR+r47YZY0wvj6VX/PKXv+STTz5h6dKlALzwwgscPHiQRx55pJ9HJiIinQbsORGfz4fN9v+T0RjTZVpERPrfgA2R8PBwamtr/dO1tbU4nc5+HJGIiHzagA2Rb3/72+zbt4/6+npOnz7Nq6++SlRUVH8PS0REzjJgT6yPHDmSpUuXkpaWhsfjYfbs2UyYMKG/hyUiImcZsCfWRURk4Buwh7NERGTgU4iIiIhlChEREbFMISIiIpYN2E9nXU6efvppiouLAYiOjuaBBx6gtLSUxx57jLa2NuLj4/3fzB+o1q9fz65du7DZbMyePZsf//jHg66GTo8//jinTp0iJyeHQ4cOsXLlSlpaWoiIiGDVqlXY7QP7ZZGamkp9fb1/nA8//DAfffQRmzZtoqOjgx/96EekpKT08ygv7I033uDpp5/m9OnTTJ06lczMzEH1fHrhhRd47rnn/NPHjx8nMTGR73//+4Omhl5jpE/96U9/Mj/4wQ9MW1ubaW9vN2lpaebll1820dHR5qOPPjIej8fMnz/f7N69u7+H+pn+/Oc/m7lz5xqPx2NOnz5tpk+fbg4dOjSoauhUWlpqvvWtb5nly5cbY4xxuVzmnXfeMcYYs2LFCrNly5b+HN5F+Xw+M23aNOPxePxtH3/8sZk+fbo5deqUaWlpMW6323zwwQf9OMoL++ijj8y0adPMiRMnTHt7u5k3b57ZvXv3oHw+GWPM//7v/5oZM2aYqqqqQVtDT+hwVh9zOBykp6czZMgQgoKCuO6666ioqGDs2LGMGTMGu92O2+2mpKSkv4f6maZMmcLvfvc77HY7J0+exOv10tjYOKhqAPi///s/1q1bx9133w1AZWUlra2tTJo0CYCkpKQBX8OHH34IwPz587n99tt57rnnulysdNiwYf6LlQ5Ur732Grfddhvh4eEEBQWxbt06hg4dOuieT50eeughli5dyrFjxwZtDT2hEOljX//61/1/pCoqKiguLsZms+FwOPx9nE4n1dXV/TXEbgkKCmLDhg24XC4iIyOpqakZdDVkZWWxdOlSrrrqKoBzanA4HAO+hsbGRiIjI9m4cSO//e1v2bp1K1VVVYPqsTh69Cher5e7776bxMREnn/++UH5fIIzVxtvbW0lPj5+0NbQUwqRz8kHH3zA/PnzeeCBBxgzZsygvLjk4sWL2bdvHydOnKCiomJQ1fDCCy8watQoIiMj/W2D8SKfN910E2vWrCE0NJSwsDBmz57Nhg0bBlUdXq+Xffv28eijj7Jt2zYOHjzIsWPHBlUNnbZu3cqPf/xjYHA+n3rDwD6DeJkoKytj8eLFZGRk4HK52L9//6C6uOThw4dpb2/nhhtuYOjQocTExFBSUkJgYKC/z0CvoaioiNraWhITE2loaOCTTz7BZrN1eRzq6uoGdA0Ab7/9Nh6Pxx+GxhhGjx49qJ5PX/7yl4mMjCQsLAyA73//+4Pu+QTQ3t7OgQMHyMnJAb64F43VnkgfO3HiBPfccw+5ubm4XC4AJk6cyJEjR/y79YWFhQP64pLHjx8nMzOT9vZ22tvbef3115k7d+6gquE3v/kNhYWFFBQUsHjxYm699VYee+wxgoODKSsrA6CgoGBA1wDQ1NTEmjVraGtro7m5mZ07d/LEE08MqouVTp8+nTfffJPGxka8Xi///d//TVxc3KB6PgG8//77/OM//iPDhg0DBt/rurdoT6SPPfvss7S1tfnfrQDMnTuXnJwcFi1aRFtbG9HR0cTFxfXjKC8sOjqagwcPMnPmTAIDA4mJicHlchEWFjZoavgsubm5ZGZm0tzczLhx40hLS+vvIV3Q9OnTeffdd5k5cyY+n4/k5GRuvvnmQXWx0okTJ/KTn/yE5ORkPB4PU6dOZd68eVx77bWD6vl07NgxwsPD/dPBwcGD6nXdW3QBRhERsUyHs0RExDKFiIiIWKYQERERyxQiIiJimUJEREQsU4iIiIhlChEREbFMISIiIpb9P82YersJnJCaAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#   MACHINE VIBRATION\n",
    "vibration= np.array(telemetry['vibration'])\n",
    "print(vibration)\n",
    "print(\"Mean value: \",vibration.mean())\n",
    "print(\"Standard deviation:\", vibration.std())\n",
    "print(\"Minimum pressure:\", vibration.min())\n",
    "print(\"Maximum  pressure: \", vibration.max())\n",
    "print(vibration)\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # set plot style\n",
    "plt.hist(vibration)\n",
    "plt.title('vibrations Distribution of machines');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# FEATURE ENGG"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first step in predictive maintenance applications is feature engineering which requires bringing the different data sources together to create features that best describe a machines's health condition at a given point in time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Telemetry lag feature selection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\immanuel.i.p\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:8: FutureWarning: how in .resample() is deprecated\n",
      "the new syntax is .resample(...).mean()\n",
      "  \n",
      "C:\\Users\\immanuel.i.p\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:19: FutureWarning: how in .resample() is deprecated\n",
      "the new syntax is .resample(...).std()\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>machineID</th>\n",
       "      <th>datetime</th>\n",
       "      <th>voltmean_3h</th>\n",
       "      <th>rotatemean_3h</th>\n",
       "      <th>pressuremean_3h</th>\n",
       "      <th>vibrationmean_3h</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 09:00:00</td>\n",
       "      <td>170.028993</td>\n",
       "      <td>449.533798</td>\n",
       "      <td>94.592122</td>\n",
       "      <td>40.893502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 12:00:00</td>\n",
       "      <td>164.192565</td>\n",
       "      <td>403.949857</td>\n",
       "      <td>105.687417</td>\n",
       "      <td>34.255891</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 15:00:00</td>\n",
       "      <td>168.134445</td>\n",
       "      <td>435.781707</td>\n",
       "      <td>107.793709</td>\n",
       "      <td>41.239405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 18:00:00</td>\n",
       "      <td>165.514453</td>\n",
       "      <td>430.472823</td>\n",
       "      <td>101.703289</td>\n",
       "      <td>40.373739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 21:00:00</td>\n",
       "      <td>168.809347</td>\n",
       "      <td>437.111120</td>\n",
       "      <td>90.911060</td>\n",
       "      <td>41.738542</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   machineID            datetime  voltmean_3h  rotatemean_3h  pressuremean_3h  \\\n",
       "0          1 2015-01-01 09:00:00   170.028993     449.533798        94.592122   \n",
       "1          1 2015-01-01 12:00:00   164.192565     403.949857       105.687417   \n",
       "2          1 2015-01-01 15:00:00   168.134445     435.781707       107.793709   \n",
       "3          1 2015-01-01 18:00:00   165.514453     430.472823       101.703289   \n",
       "4          1 2015-01-01 21:00:00   168.809347     437.111120        90.911060   \n",
       "\n",
       "   vibrationmean_3h  \n",
       "0         40.893502  \n",
       "1         34.255891  \n",
       "2         41.239405  \n",
       "3         40.373739  \n",
       "4         41.738542  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculate mean values for telemetry features\n",
    "temp = []\n",
    "fields = ['volt', 'rotate', 'pressure', 'vibration']\n",
    "for col in fields:\n",
    "    temp.append(pd.pivot_table(telemetry,\n",
    "                               index='datetime',\n",
    "                               columns='machineID',\n",
    "                               values=col).resample('3H', closed='left', label='right', how='mean').unstack())\n",
    "telemetry_mean_3h = pd.concat(temp, axis=1)\n",
    "telemetry_mean_3h.columns = [i + 'mean_3h' for i in fields]\n",
    "telemetry_mean_3h.reset_index(inplace=True)\n",
    "\n",
    "# repeat for standard deviation\n",
    "temp = []\n",
    "for col in fields:\n",
    "    temp.append(pd.pivot_table(telemetry,\n",
    "                               index='datetime',\n",
    "                               columns='machineID',\n",
    "                               values=col).resample('3H', closed='left', label='right', how='std').unstack())\n",
    "telemetry_sd_3h = pd.concat(temp, axis=1)\n",
    "telemetry_sd_3h.columns = [i + 'sd_3h' for i in fields]\n",
    "telemetry_sd_3h.reset_index(inplace=True)\n",
    "\n",
    "telemetry_mean_3h.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\immanuel.i.p\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:2: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  \n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>machineID</th>\n",
       "      <th>voltmean_3h</th>\n",
       "      <th>rotatemean_3h</th>\n",
       "      <th>pressuremean_3h</th>\n",
       "      <th>vibrationmean_3h</th>\n",
       "      <th>voltsd_3h</th>\n",
       "      <th>rotatesd_3h</th>\n",
       "      <th>pressuresd_3h</th>\n",
       "      <th>vibrationsd_3h</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "      <td>292000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>170.777300</td>\n",
       "      <td>446.605807</td>\n",
       "      <td>100.858510</td>\n",
       "      <td>40.384920</td>\n",
       "      <td>13.299090</td>\n",
       "      <td>44.456338</td>\n",
       "      <td>8.885976</td>\n",
       "      <td>4.441164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>28.866119</td>\n",
       "      <td>9.500846</td>\n",
       "      <td>33.130042</td>\n",
       "      <td>7.414517</td>\n",
       "      <td>3.478823</td>\n",
       "      <td>6.965914</td>\n",
       "      <td>23.216712</td>\n",
       "      <td>4.656211</td>\n",
       "      <td>2.320302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>125.532506</td>\n",
       "      <td>211.811184</td>\n",
       "      <td>72.118639</td>\n",
       "      <td>26.569635</td>\n",
       "      <td>0.025509</td>\n",
       "      <td>0.078991</td>\n",
       "      <td>0.027417</td>\n",
       "      <td>0.015278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>25.750000</td>\n",
       "      <td>164.449510</td>\n",
       "      <td>427.560977</td>\n",
       "      <td>96.238546</td>\n",
       "      <td>38.147765</td>\n",
       "      <td>8.027455</td>\n",
       "      <td>26.903705</td>\n",
       "      <td>5.370581</td>\n",
       "      <td>2.684790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>170.434378</td>\n",
       "      <td>448.382261</td>\n",
       "      <td>100.234191</td>\n",
       "      <td>40.145837</td>\n",
       "      <td>12.495658</td>\n",
       "      <td>41.794719</td>\n",
       "      <td>8.346020</td>\n",
       "      <td>4.173955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>75.250000</td>\n",
       "      <td>176.611778</td>\n",
       "      <td>468.448505</td>\n",
       "      <td>104.406557</td>\n",
       "      <td>42.227559</td>\n",
       "      <td>17.688490</td>\n",
       "      <td>59.104130</td>\n",
       "      <td>11.790303</td>\n",
       "      <td>5.900106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>241.420717</td>\n",
       "      <td>586.682904</td>\n",
       "      <td>162.309656</td>\n",
       "      <td>69.311324</td>\n",
       "      <td>58.444332</td>\n",
       "      <td>179.903039</td>\n",
       "      <td>35.659369</td>\n",
       "      <td>18.305595</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           machineID    voltmean_3h  rotatemean_3h  pressuremean_3h  \\\n",
       "count  292000.000000  292000.000000  292000.000000    292000.000000   \n",
       "mean       50.500000     170.777300     446.605807       100.858510   \n",
       "std        28.866119       9.500846      33.130042         7.414517   \n",
       "min         1.000000     125.532506     211.811184        72.118639   \n",
       "25%        25.750000     164.449510     427.560977        96.238546   \n",
       "50%        50.500000     170.434378     448.382261       100.234191   \n",
       "75%        75.250000     176.611778     468.448505       104.406557   \n",
       "max       100.000000     241.420717     586.682904       162.309656   \n",
       "\n",
       "       vibrationmean_3h      voltsd_3h    rotatesd_3h  pressuresd_3h  \\\n",
       "count     292000.000000  292000.000000  292000.000000  292000.000000   \n",
       "mean          40.384920      13.299090      44.456338       8.885976   \n",
       "std            3.478823       6.965914      23.216712       4.656211   \n",
       "min           26.569635       0.025509       0.078991       0.027417   \n",
       "25%           38.147765       8.027455      26.903705       5.370581   \n",
       "50%           40.145837      12.495658      41.794719       8.346020   \n",
       "75%           42.227559      17.688490      59.104130      11.790303   \n",
       "max           69.311324      58.444332     179.903039      35.659369   \n",
       "\n",
       "       vibrationsd_3h  \n",
       "count   292000.000000  \n",
       "mean         4.441164  \n",
       "std          2.320302  \n",
       "min          0.015278  \n",
       "25%          2.684790  \n",
       "50%          4.173955  \n",
       "75%          5.900106  \n",
       "max         18.305595  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# merge columns of feature set\n",
    "telemetry_feat = pd.concat([telemetry_mean_3h, telemetry_sd_3h.ix[:, 2:6]],axis=1).dropna()\n",
    "telemetry_feat.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Error lag feature selection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#create a column for each error type\n",
    "error_count = pd.get_dummies(errors.set_index('datetime')).reset_index()\n",
    "error_count=error_count.drop(['Unnamed: 0'], axis=1)\n",
    "error_count.columns = ['datetime', 'machineID', 'error1', 'error2', 'error3', 'error4', 'error5']\n",
    "#combine errors for a given machine in a given hour\n",
    "error_count = error_count.groupby(['machineID', 'datetime']).sum().reset_index()\n",
    "error_count.head(13)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>machineID</th>\n",
       "      <th>error1</th>\n",
       "      <th>error2</th>\n",
       "      <th>error3</th>\n",
       "      <th>error4</th>\n",
       "      <th>error5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>0.001153</td>\n",
       "      <td>0.001128</td>\n",
       "      <td>0.000957</td>\n",
       "      <td>0.000830</td>\n",
       "      <td>0.000406</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>28.866087</td>\n",
       "      <td>0.033934</td>\n",
       "      <td>0.033563</td>\n",
       "      <td>0.030913</td>\n",
       "      <td>0.028795</td>\n",
       "      <td>0.020154</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>25.750000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>75.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           machineID         error1         error2         error3  \\\n",
       "count  876100.000000  876100.000000  876100.000000  876100.000000   \n",
       "mean       50.500000       0.001153       0.001128       0.000957   \n",
       "std        28.866087       0.033934       0.033563       0.030913   \n",
       "min         1.000000       0.000000       0.000000       0.000000   \n",
       "25%        25.750000       0.000000       0.000000       0.000000   \n",
       "50%        50.500000       0.000000       0.000000       0.000000   \n",
       "75%        75.250000       0.000000       0.000000       0.000000   \n",
       "max       100.000000       1.000000       1.000000       1.000000   \n",
       "\n",
       "              error4         error5  \n",
       "count  876100.000000  876100.000000  \n",
       "mean        0.000830       0.000406  \n",
       "std         0.028795       0.020154  \n",
       "min         0.000000       0.000000  \n",
       "25%         0.000000       0.000000  \n",
       "50%         0.000000       0.000000  \n",
       "75%         0.000000       0.000000  \n",
       "max         1.000000       1.000000  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "error_count = telemetry[['datetime', 'machineID']].merge(error_count, on=['machineID', 'datetime'], how='left').fillna(0.0)\n",
    "error_count.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TIME SINCE LAST REPLACEMENT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>machineID</th>\n",
       "      <th>comp1</th>\n",
       "      <th>comp2</th>\n",
       "      <th>comp3</th>\n",
       "      <th>comp4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "      <td>876100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>53.525185</td>\n",
       "      <td>51.540806</td>\n",
       "      <td>52.725962</td>\n",
       "      <td>53.834191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>28.866087</td>\n",
       "      <td>62.491679</td>\n",
       "      <td>59.269254</td>\n",
       "      <td>58.873114</td>\n",
       "      <td>59.707978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>25.750000</td>\n",
       "      <td>13.291667</td>\n",
       "      <td>12.125000</td>\n",
       "      <td>13.125000</td>\n",
       "      <td>13.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>50.500000</td>\n",
       "      <td>32.791667</td>\n",
       "      <td>29.666667</td>\n",
       "      <td>32.291667</td>\n",
       "      <td>32.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>75.250000</td>\n",
       "      <td>68.708333</td>\n",
       "      <td>66.541667</td>\n",
       "      <td>67.333333</td>\n",
       "      <td>70.458333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>491.958333</td>\n",
       "      <td>348.958333</td>\n",
       "      <td>370.958333</td>\n",
       "      <td>394.958333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           machineID          comp1          comp2          comp3  \\\n",
       "count  876100.000000  876100.000000  876100.000000  876100.000000   \n",
       "mean       50.500000      53.525185      51.540806      52.725962   \n",
       "std        28.866087      62.491679      59.269254      58.873114   \n",
       "min         1.000000       0.000000       0.000000       0.000000   \n",
       "25%        25.750000      13.291667      12.125000      13.125000   \n",
       "50%        50.500000      32.791667      29.666667      32.291667   \n",
       "75%        75.250000      68.708333      66.541667      67.333333   \n",
       "max       100.000000     491.958333     348.958333     370.958333   \n",
       "\n",
       "               comp4  \n",
       "count  876100.000000  \n",
       "mean       53.834191  \n",
       "std        59.707978  \n",
       "min         0.000000  \n",
       "25%        13.000000  \n",
       "50%        32.500000  \n",
       "75%        70.458333  \n",
       "max       394.958333  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# make a column for each error type\n",
    "comp_rep = pd.get_dummies(maint.set_index('datetime')).reset_index()\n",
    "comp_rep=comp_rep.drop(['Unnamed: 0'],axis=1)\n",
    "comp_rep.columns = ['datetime', 'machineID', 'comp1', 'comp2', 'comp3', 'comp4']\n",
    "# joining repairs for a given machine in a given hour\n",
    "comp_rep = comp_rep.groupby(['machineID', 'datetime']).sum().reset_index()\n",
    "# add timepoints where no components were replaced\n",
    "comp_rep = telemetry[['datetime', 'machineID']].merge(comp_rep, on=['datetime', 'machineID'],how='outer').fillna(0).sort_values(by=['machineID', 'datetime'])\n",
    "components = ['comp1', 'comp2', 'comp3', 'comp4']\n",
    "for comp in components:\n",
    "# convert indicator to most recent date of component\n",
    "    comp_rep.loc[comp_rep[comp] < 1, comp] = None\n",
    "    comp_rep.loc[-comp_rep[comp].isnull(), comp] = comp_rep.loc[-comp_rep[comp].isnull(), 'datetime'].astype('datetime64[ns]')\n",
    "    comp_rep[comp]=comp_rep[comp].astype('datetime64[ns]')\n",
    "# forward-fill the most-recent date of component change\n",
    "    comp_rep[comp] = comp_rep[comp].fillna(method='ffill')\n",
    "# remove dates in 2014 (may have NaN or future component change dates)    \n",
    "comp_rep = comp_rep.loc[comp_rep['datetime'] > pd.to_datetime('2015-01-01')]\n",
    "# replace dates of most recent component change with days since most recent component change\n",
    "for comp in components:\n",
    "    comp_rep[comp] = (comp_rep['datetime'] - comp_rep[comp]) / np.timedelta64(1, 'D')\n",
    "comp_rep.describe()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>datetime</th>\n",
       "      <th>machineID</th>\n",
       "      <th>comp1</th>\n",
       "      <th>comp2</th>\n",
       "      <th>comp3</th>\n",
       "      <th>comp4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01 06:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>154.000000</td>\n",
       "      <td>169.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-01 07:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>19.041667</td>\n",
       "      <td>214.041667</td>\n",
       "      <td>154.041667</td>\n",
       "      <td>169.041667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-01 08:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>19.083333</td>\n",
       "      <td>214.083333</td>\n",
       "      <td>154.083333</td>\n",
       "      <td>169.083333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-01 09:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>19.125000</td>\n",
       "      <td>214.125000</td>\n",
       "      <td>154.125000</td>\n",
       "      <td>169.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-01 10:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>19.166667</td>\n",
       "      <td>214.166667</td>\n",
       "      <td>154.166667</td>\n",
       "      <td>169.166667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             datetime  machineID      comp1       comp2       comp3  \\\n",
       "0 2015-01-01 06:00:00          1  19.000000  214.000000  154.000000   \n",
       "1 2015-01-01 07:00:00          1  19.041667  214.041667  154.041667   \n",
       "2 2015-01-01 08:00:00          1  19.083333  214.083333  154.083333   \n",
       "3 2015-01-01 09:00:00          1  19.125000  214.125000  154.125000   \n",
       "4 2015-01-01 10:00:00          1  19.166667  214.166667  154.166667   \n",
       "\n",
       "        comp4  \n",
       "0  169.000000  \n",
       "1  169.041667  \n",
       "2  169.083333  \n",
       "3  169.125000  \n",
       "4  169.166667  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "comp_rep.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Concat of machine features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\immanuel.i.p\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:2: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   machineID            datetime  voltmean_3h  rotatemean_3h  pressuremean_3h  \\\n",
      "0          1 2015-01-01 09:00:00   170.028993     449.533798        94.592122   \n",
      "1          1 2015-01-01 12:00:00   164.192565     403.949857       105.687417   \n",
      "2          1 2015-01-01 15:00:00   168.134445     435.781707       107.793709   \n",
      "3          1 2015-01-01 18:00:00   165.514453     430.472823       101.703289   \n",
      "4          1 2015-01-01 21:00:00   168.809347     437.111120        90.911060   \n",
      "\n",
      "   vibrationmean_3h  voltsd_3h  rotatesd_3h  pressuresd_3h  vibrationsd_3h  \\\n",
      "0         40.893502   6.721032    67.849599      18.934956        5.874970   \n",
      "1         34.255891   7.596570    50.120452       8.555032        7.662229   \n",
      "2         41.239405  10.124584    55.084734       5.909721        5.169304   \n",
      "3         40.373739   4.673269    42.047278       4.554047        2.106108   \n",
      "4         41.738542  14.752132    47.048609       4.244158        2.207884   \n",
      "\n",
      "   ...  error3  error4  error5   comp1    comp2    comp3    comp4  Unnamed: 0  \\\n",
      "0  ...     0.0     0.0     0.0  19.125  214.125  154.125  169.125           0   \n",
      "1  ...     0.0     0.0     0.0  19.250  214.250  154.250  169.250           0   \n",
      "2  ...     0.0     0.0     0.0  19.375  214.375  154.375  169.375           0   \n",
      "3  ...     0.0     0.0     0.0  19.500  214.500  154.500  169.500           0   \n",
      "4  ...     0.0     0.0     0.0  19.625  214.625  154.625  169.625           0   \n",
      "\n",
      "    model  age  \n",
      "0  model3   18  \n",
      "1  model3   18  \n",
      "2  model3   18  \n",
      "3  model3   18  \n",
      "4  model3   18  \n",
      "\n",
      "[5 rows x 22 columns]\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "telemetry_feat = pd.concat([telemetry_mean_3h, telemetry_sd_3h.ix[:, 2:6]],axis=1).dropna()\n",
    "final_feat = telemetry_feat.merge(error_count, on=['datetime', 'machineID'], how='left')\n",
    "final_feat = final_feat.merge(comp_rep, on=['datetime', 'machineID'], how='left')\n",
    "final_feat = final_feat.merge(machines, on=['machineID'], how='left')\n",
    "print(final_feat.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Unnamed: 0             int64\n",
       "datetime      datetime64[ns]\n",
       "machineID              int64\n",
       "failure               object\n",
       "dtype: object"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "failures.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "failures['datetime']=pd.to_datetime(failures['datetime'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LABEL CONSTRUCTION"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When using multi-class classification for predicting failure due to a problem, labelling is done by taking a time window prior to the failure of an asset and labelling the feature records that fall into that window as \"about to fail due to a problem\" while labelling all other records as normal. This time window should be picked according to the business case: in some situations it may be enough to predict failures hours in advance, while in others days or weeks may be needed to allow e.g. for arrival of replacement parts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>machineID</th>\n",
       "      <th>datetime</th>\n",
       "      <th>voltmean_3h</th>\n",
       "      <th>rotatemean_3h</th>\n",
       "      <th>pressuremean_3h</th>\n",
       "      <th>vibrationmean_3h</th>\n",
       "      <th>voltsd_3h</th>\n",
       "      <th>rotatesd_3h</th>\n",
       "      <th>pressuresd_3h</th>\n",
       "      <th>vibrationsd_3h</th>\n",
       "      <th>...</th>\n",
       "      <th>error5</th>\n",
       "      <th>comp1</th>\n",
       "      <th>comp2</th>\n",
       "      <th>comp3</th>\n",
       "      <th>comp4</th>\n",
       "      <th>Unnamed: 0_x</th>\n",
       "      <th>model</th>\n",
       "      <th>age</th>\n",
       "      <th>Unnamed: 0_y</th>\n",
       "      <th>failure</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 09:00:00</td>\n",
       "      <td>170.028993</td>\n",
       "      <td>449.533798</td>\n",
       "      <td>94.592122</td>\n",
       "      <td>40.893502</td>\n",
       "      <td>6.721032</td>\n",
       "      <td>67.849599</td>\n",
       "      <td>18.934956</td>\n",
       "      <td>5.874970</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.125</td>\n",
       "      <td>214.125</td>\n",
       "      <td>154.125</td>\n",
       "      <td>169.125</td>\n",
       "      <td>0</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>none</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 12:00:00</td>\n",
       "      <td>164.192565</td>\n",
       "      <td>403.949857</td>\n",
       "      <td>105.687417</td>\n",
       "      <td>34.255891</td>\n",
       "      <td>7.596570</td>\n",
       "      <td>50.120452</td>\n",
       "      <td>8.555032</td>\n",
       "      <td>7.662229</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.250</td>\n",
       "      <td>214.250</td>\n",
       "      <td>154.250</td>\n",
       "      <td>169.250</td>\n",
       "      <td>0</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>none</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 15:00:00</td>\n",
       "      <td>168.134445</td>\n",
       "      <td>435.781707</td>\n",
       "      <td>107.793709</td>\n",
       "      <td>41.239405</td>\n",
       "      <td>10.124584</td>\n",
       "      <td>55.084734</td>\n",
       "      <td>5.909721</td>\n",
       "      <td>5.169304</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.375</td>\n",
       "      <td>214.375</td>\n",
       "      <td>154.375</td>\n",
       "      <td>169.375</td>\n",
       "      <td>0</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>none</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 18:00:00</td>\n",
       "      <td>165.514453</td>\n",
       "      <td>430.472823</td>\n",
       "      <td>101.703289</td>\n",
       "      <td>40.373739</td>\n",
       "      <td>4.673269</td>\n",
       "      <td>42.047278</td>\n",
       "      <td>4.554047</td>\n",
       "      <td>2.106108</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.500</td>\n",
       "      <td>214.500</td>\n",
       "      <td>154.500</td>\n",
       "      <td>169.500</td>\n",
       "      <td>0</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>none</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01 21:00:00</td>\n",
       "      <td>168.809347</td>\n",
       "      <td>437.111120</td>\n",
       "      <td>90.911060</td>\n",
       "      <td>41.738542</td>\n",
       "      <td>14.752132</td>\n",
       "      <td>47.048609</td>\n",
       "      <td>4.244158</td>\n",
       "      <td>2.207884</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.625</td>\n",
       "      <td>214.625</td>\n",
       "      <td>154.625</td>\n",
       "      <td>169.625</td>\n",
       "      <td>0</td>\n",
       "      <td>model3</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>none</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   machineID            datetime  voltmean_3h  rotatemean_3h  pressuremean_3h  \\\n",
       "0          1 2015-01-01 09:00:00   170.028993     449.533798        94.592122   \n",
       "1          1 2015-01-01 12:00:00   164.192565     403.949857       105.687417   \n",
       "2          1 2015-01-01 15:00:00   168.134445     435.781707       107.793709   \n",
       "3          1 2015-01-01 18:00:00   165.514453     430.472823       101.703289   \n",
       "4          1 2015-01-01 21:00:00   168.809347     437.111120        90.911060   \n",
       "\n",
       "   vibrationmean_3h  voltsd_3h  rotatesd_3h  pressuresd_3h  vibrationsd_3h  \\\n",
       "0         40.893502   6.721032    67.849599      18.934956        5.874970   \n",
       "1         34.255891   7.596570    50.120452       8.555032        7.662229   \n",
       "2         41.239405  10.124584    55.084734       5.909721        5.169304   \n",
       "3         40.373739   4.673269    42.047278       4.554047        2.106108   \n",
       "4         41.738542  14.752132    47.048609       4.244158        2.207884   \n",
       "\n",
       "   ...  error5   comp1    comp2    comp3    comp4  Unnamed: 0_x   model  age  \\\n",
       "0  ...     0.0  19.125  214.125  154.125  169.125             0  model3   18   \n",
       "1  ...     0.0  19.250  214.250  154.250  169.250             0  model3   18   \n",
       "2  ...     0.0  19.375  214.375  154.375  169.375             0  model3   18   \n",
       "3  ...     0.0  19.500  214.500  154.500  169.500             0  model3   18   \n",
       "4  ...     0.0  19.625  214.625  154.625  169.625             0  model3   18   \n",
       "\n",
       "   Unnamed: 0_y  failure  \n",
       "0           NaN     none  \n",
       "1           NaN     none  \n",
       "2           NaN     none  \n",
       "3           NaN     none  \n",
       "4           NaN     none  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labeled_features = final_feat.merge(failures, on=['datetime', 'machineID'], how='left')\n",
    "# labeled_features.columns\n",
    "labeled_features[\"failure\"]=labeled_features[\"failure\"].astype(object).fillna(method = 'bfill', limit = 7)\n",
    "labeled_features[\"failure\"] = labeled_features[\"failure\"].fillna('none')\n",
    "\n",
    "labeled_features[\"failure\"]=labeled_features[\"failure\"].astype('category')\n",
    "labeled_features.groupby('failure').count()\n",
    "labeled_features.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_feat['error1']=final_feat['error1'].fillna(0)\n",
    "final_feat['error2']=final_feat['error2'].fillna(0)\n",
    "final_feat['error3']=final_feat['error3'].fillna(0)\n",
    "final_feat['error4']=final_feat['error4'].fillna(0)\n",
    "final_feat['error5']=final_feat['error5'].fillna(0)\n",
    "final_feat['comp1']=final_feat['comp1'].fillna(0)\n",
    "final_feat['comp2']=final_feat['comp2'].fillna(0)\n",
    "final_feat['comp3']=final_feat['comp3'].fillna(0)\n",
    "final_feat['comp4']=final_feat['comp4'].fillna(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "labeled_features=labeled_features.drop(['Unnamed: 0_x'],axis=1)\n",
    "labeled_features=labeled_features.drop(['Unnamed: 0_y'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['machineID', 'datetime', 'voltmean_3h', 'rotatemean_3h',\n",
       "       'pressuremean_3h', 'vibrationmean_3h', 'voltsd_3h', 'rotatesd_3h',\n",
       "       'pressuresd_3h', 'vibrationsd_3h', 'error1', 'error2', 'error3',\n",
       "       'error4', 'error5', 'comp1', 'comp2', 'comp3', 'comp4', 'model', 'age',\n",
       "       'failure'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labeled_features.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model Building and Evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = labeled_features[['failure']]\n",
    "x = labeled_features.drop(['machineID','datetime','failure','model'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state=12345)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.isnan(X_train['comp1']).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import linear_model\n",
    "from sklearn import metrics\n",
    "from sklearn.metrics import precision_recall_fscore_support"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Gradient Boosting algorithm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\immanuel.i.p\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:761: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GradientBoostingClassifier(criterion='friedman_mse', init=None,\n",
       "              learning_rate=0.1, loss='deviance', max_depth=3,\n",
       "              max_features=None, max_leaf_nodes=None,\n",
       "              min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "              min_samples_leaf=1, min_samples_split=2,\n",
       "              min_weight_fraction_leaf=0.0, n_estimators=100,\n",
       "              n_iter_no_change=None, presort='auto', random_state=42,\n",
       "              subsample=1.0, tol=0.0001, validation_fraction=0.1,\n",
       "              verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "\n",
    "gb_model = GradientBoostingClassifier(random_state=42)\n",
    "gb_model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TESTING THE DATA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred_test_y = gb_model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GB classifier training set accuracy: 0.9914200040111726 \n",
      " GB classifier test set accuracy: 0.990469450880577 \n",
      " F1 score: (0.8337580840543357, 0.7196296658768465, 0.7705455285010786, None)\n"
     ]
    }
   ],
   "source": [
    "train_acc=metrics.accuracy_score(y_train, gb_model.predict(X_train))\n",
    "test_acc=metrics.accuracy_score(y_test, gb_model.predict(X_test))\n",
    "#f1 score\n",
    "precision_recall_f1=precision_recall_fscore_support(y_test, pred_test_y, average='macro')\n",
    "print('GB classifier training set accuracy:',train_acc,'\\n','GB classifier test set accuracy:', test_acc,'\\n F1 score:',precision_recall_f1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
